【发布时间】:2014-10-27 08:37:03
【问题描述】:
我通常会在viewDidLoad 中将委托设置为self,但由于单例类不是UIViewController 的子类,我想知道在哪里为任何特定协议设置委托。
以下是我尝试过但不起作用的方法:
+ (instancetype)sharedInstance {
static id sharedInstance;
static dispatch_once_t once;
dispatch_once(&once, ^{
sharedInstance = [[[self class] alloc] init];
});
static dispatch_once_t once2;
dispatch_once(&once2, ^{
SharedManager.sharedInstance.delegate = SharedManager.sharedInstance;
});
return sharedInstance;
}
由于上述方法不起作用,唯一接近的方法是为每个类方法设置委托,如下所示:
+ (void)classMethod1 {
SharedManager.sharedInstance.delegate = SharedManager.sharedInstance;
//class method 1 code here
}
+ (void)classMethod2 {
SharedManager.sharedInstance.delegate = SharedManager.sharedInstance;
//class method 2 code here, etc...
}
但这似乎很愚蠢。
我想我可以在第一次使用委托时将其设置在班级之外,但我依赖于记住这样做,甚至知道第一次是什么时候。
【问题讨论】: