2013-02-08 67 views
-1

在我的以下link 中有一個類似的問題,但它不能完全回答我的查詢。Objective C代表和類方法vs實例方法

我正在爲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僅在該類的一個實例中可用。

+0

我明白這是一個解決方案,但我是使用委託模式,而不是塊模式,我提到哪些更有意義? – pechar 2013-02-08 19:17:39

+0

編輯答案以回答您關於如何調用委託的問題。 – 2013-02-08 20:41:56

+0

@ Fruit-Geek爲什麼我的問題被低估?我知道'self'只在實例類中可用,這不是我的問題。我只需要知道是否最好使用類方法並將'(id)委託參數傳遞給它(委託傳遞遵循FacebookHelperDelegate協議)並像使用'[delegate sessionStateChanged]一樣使用它'或者使用它實例方法並使用參數'(id)委託'調用協議方法,如下所示: '[self.delegate = delegate];' [self.delegate sessionStateChanged]'Thanks – pechar 2013-02-09 15:41:36