我想知道是否可以将输入流的委托设置为另一个类。到目前为止,我遇到的所有例子都是关于self的:CCD_ 1。我想将委托设置为另一个类,比如ViewController
而不是self。提前谢谢。
如果您的ViewController
正在响应NSStreamDelegate
,则可以启动控制器的实例并像往常一样设置委托。
@interface ViewController : NSOperation<NSStreamDelegate>
...
-
ViewController *vc = [[ViewController alloc] init];
[inputStream setDelegate:vc];
例如
更新:
在TCPConnection
类中使用id或UIViewController<NSStreamDelegate>
变量来保存父级。
例如:
// TCPConnection.h
@interface TCPConnection : NSOperation<NSStreamDelegate>
@property(nonatomic, assign) UIViewController<NSStreamDelegate> parent;
-(id)initWithParent:(UIViewController<NSStreamDelegate> *)p_parent;
...
// TCPConnection.m
-(id)initWithParent:(UIViewController<NSStreamDelegate> *)p_parent
{
self = [super init];
self.parent = p_parent;
return self;
}
// UIViewController<NSStreamDelegate>.m
TCPConnection *connection = [[TCPConnection alloc] initWithParent:self];
或者一个singlton解决方案,您总是只调用
TCPConnection *connection = [TCPConnection sharedInstance];
并且只有一个此类的实例。在大多数情况下,最好的方式;)
您可以对委托进行类型转换,并将其设置为某个特定的委托,然后调用该委托。