我有一个静态库,目前正在使用NSNotificationCenter发送响应。但我觉得代表们会是一个更好的解决方案。问题是当我还不知道他们的标题时如何调用委托方法。我不知道如何在使用库时实现那些不适合我的东西。
那么是否有允许用户创建自己的方法以及在需要时调用它们的库?
答案 0 :(得分:0)
代表经常与您沟通,声明一个指定回调集的协议。
@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
在这两种情况下,你都会指定界面,而不需要在实现中查看其标题。他们可以在块体中或在MONImageGeneratorObserver
回调的定义中调用自己的方法。