Objective C委托和类方法与实例方法

时间:2013-02-08 18:33:42

标签: objective-c delegates class-method instance-methods

以下link有类似的问题。 但它并没有完全回答我的问题。

我正在为Facebook设置一个帮助类(遵循委托模式)。其中一个类方法的一个例子是:

+ (void)openSession:(id)delegate;

此方法调用Facebook openActiveSessionWithReadPermissions方法,该方法需要completionHandler块。调用委托方法是否有意义,在块中说sessionStateChanged如下?

[delegate sessionStateChanged];

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

2 个答案:

答案 0 :(得分:1)

如果只是单个回调,那么使用块参数而不是委托作为参数会更好。

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

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

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

答案 1 :(得分:0)

我尝试了两种方法,即使用类和实例方法。他们中的任何一个都会这样做,但是为了遵循正确的委托模式,我相信使用实例方法更合适。