以下link有类似的问题。 但它并没有完全回答我的问题。
我正在为Facebook设置一个帮助类(遵循委托模式)。其中一个类方法的一个例子是:
+ (void)openSession:(id)delegate;
此方法调用Facebook openActiveSessionWithReadPermissions
方法,该方法需要completionHandler块。调用委托方法是否有意义,在块中说sessionStateChanged
如下?
[delegate sessionStateChanged];
或者最好为Facebook帮助程序类使用实例方法,并使用completionHandler块中的[self.delegate sessionStateChanged]
调用委托。
答案 0 :(得分:1)
如果只是单个回调,那么使用块参数而不是委托作为参数会更好。
+ (void)openSession:(void (^)(void))sessionStateChangedBlock
这样您就不必担心定义委托协议了。
如果要使用委托,则必须在类级别定义委托变量。您不能使用[self.delegate sessionStateChanged]
,因为您将委托保存为类变量。 self
仅在类的实例中可用。
答案 1 :(得分:0)
我尝试了两种方法,即使用类和实例方法。他们中的任何一个都会这样做,但是为了遵循正确的委托模式,我相信使用实例方法更合适。