iOS:存储和触发回调块

时间:2014-04-08 11:04:07

标签: ios objective-c cocoa callback objective-c-blocks

我试图找出是否存在一种存储回调块的标准方法,并在不使用将该块存储在属性或字典中的情况下执行它。

想象一下以下情况:

我有一个类,我们说MyApiClient并且它有一个名为getListOfBooksWithCompletionHandler:(void (^))completion的方法,其中在请求完成时调用完成块。到目前为止一切都很好。

内部MyApiClient必须调用其他API的一些方法,这些方法不提供完成但是阻止,只调用委托调用。

这意味着我需要将回调块存储在某处,直到从其他API调用相应的委托方法。

在过去的项目中,我通过将回调块存储在NSMutableDictionary中并使用某种唯一标识符在委托调用期间找到它来解决此问题。

这对我来说感觉就像不需要的样板代码一样,所以我的问题是:有没有最佳实践/ API更优雅地做到这一点?也许某种机制允许我存储具有特定ID的块并简单地触发将调用发送到块的信号?

使用谷歌和Apple的文档无法找到很多相关信息。有什么想法吗?

1 个答案:

答案 0 :(得分:0)

我建议您将完成块存储在类的属性中

@property (nonatomic, copy) void (^completionHandler)(parameters ...);

为每个请求创建单独的实例。然后每个实例都可以保存块 和一个特定请求的其他状态信息。它也可以作为代表 对于"其他API"你正在使用。