我有一個靜態庫,當前使用NSNotificationCenter發送響應。但我覺得代表會是更好的解決方案。問題是如何在我不知道它們的頭文件時調用委託方法。我不知道如何實現這個庫在使用時不能滿足我的要求。靜態庫回調
那麼有沒有好的方法允許用戶創建自己的方法,並在需要時調用它們?
我有一個靜態庫,當前使用NSNotificationCenter發送響應。但我覺得代表會是更好的解決方案。問題是如何在我不知道它們的頭文件時調用委託方法。我不知道如何實現這個庫在使用時不能滿足我的要求。靜態庫回調
那麼有沒有好的方法允許用戶創建自己的方法,並在需要時調用它們?
委託人通常會通過聲明一個指定一組回調的協議來與之通信。
@protocol MONImageGeneratorObserver <NSObject>
@required
// called when an image has been generated
- (void)generatedImageWasSavedToURL:(NSURL *)pURL;
- (void)imageGenerationDidComplete;
@end
那麼你可以告訴你的客戶,他們必須通過指定在API的協議實現的接口:
- (void)setImageGeneratorObserver:(NSObject<MONImageGeneratorObserver>*)pObserver;
做到這一點的另一個好方法是提供一個參數,它是塊。您通常會在收到該塊時複製該塊。那麼你不需要知道客戶代碼的任何內容。
你的API應該是非常具體:
@interface MONObject : NSObject
+ (void)performAsynchronousLoadWithSuccessfulCallback:(void(^)(void))pSuccess errorCallback:(void(^)(NSError *))pError;
@end
@implementation MONObject
+ (void)performAsynchronousLoadWithSuccessfulCallback:(void(^)(void))pSuccess errorCallback:(void(^)(NSError *))pError
{
if (random()%2) {
// load succeeded!
pSuccess();
}
else {
// load failed = =
NSError * e = ...;
pError(e);
}
}
@end
在這兩種情況下,你指定接口並且不需要在您的設備中看到它們的標題ntation。他們可以在塊體或回調的定義中調用他們自己的方法。
是的,委託模式完全適用於此。 – 2013-07-15 12:18:07