-1

在以下链接中有一个类似的问题, 但它并没有完全回答我的问题。

我正在为 Facebook 设置一个助手类(遵循委托模式)。类方法之一的示例是:

+ (void)openSession:(id)delegate;

此方法调用 FacebookopenActiveSessionWithReadPermissions方法,该方法需要一个 completionHandler 块。在块中调用委托方法是否有意义,sessionStateChanged如下所示?

[delegate sessionStateChanged];

或者最好使用 Facebook 帮助程序类的实例方法并[self.delegate sessionStateChanged]在 completionHandler 块中调用委托。

4

2 回答 2

1

如果仅用于单个回调,则最好使用块参数而不是委托作为参数。

+ (void)openSession:(void (^)(void))sessionStateChangedBlock

这样您就不必担心定义委托协议。

如果要使用委托,则必须在类级别定义委托变量。您不能使用[self.delegate sessionStateChanged],因为您将委托保存为类变量。self仅在类的实例中可用。

于 2013-02-08T18:58:25.343 回答
0

我尝试了这两种方法,即使用类和实例方法。它们中的任何一个都可以,尽管遵循正确的委托模式,我相信使用实例方法更合适。

于 2013-02-14T07:53:53.027 回答