静态库回调

时间:2013-07-15 12:14:31

标签: objective-c delegates static-libraries

我有一个静态库,目前正在使用NSNotificationCenter发送响应。但我觉得代表们会是一个更好的解决方案。问题是当我还不知道他们的标题时如何调用委托方法。我不知道如何在使用库时实现那些不适合我的东西。

那么是否有允许用户创建自己的方法以及在需要时调用它们的库?

1 个答案:

答案 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回调的定义中调用自己的方法。