我试图找出是否有一种标准的方法来存储回调块,并让它稍后执行,而不需要将块存储在属性或字典中。
设想以下场景:
我有一个类,假设是MyApiClient
,它有一个名为getListOfBooksWithCompletionHandler:(void (^))completion
的方法,在请求完成时调用完成块。到目前为止还不错。
在内部,MyApiClient
必须调用其他API的一些方法,这些方法不提供完成,而只提供块,只有委托调用。
这意味着我需要在某个地方存储回调块,直到从另一个API调用相应的委托方法为止。
在过去的一个项目中,我通过将回调块存储在NSMutableDictionary
中来解决这个问题,并使用某种唯一标识符在委托调用期间找到它。
但是,对于我来说,这就像是不需要的样板代码,,所以我的问题是:是否有一个最佳实践/API来更优雅地做到这一点?也许某种机制允许我用一个特定的ID来存储这个块,并简单地触发一个将调用发送到该块的信号?
在谷歌和苹果的文档中都找不到这方面的信息。有什么想法吗?
发布于 2014-04-08 12:14:46
我建议您将完成块存储在类的属性中。
@property (nonatomic, copy) void (^completionHandler)(parameters ...);
并为每个请求创建单独的实例。然后,每个实例都可以保存一个特定请求的块和其他状态信息。它还可以作为您正在使用的“其他API”的委托。
https://stackoverflow.com/questions/22935050
复制相似问题