我试图找出是否存在一种存储回调块的标准方法,并在不使用将该块存储在属性或字典中的情况下执行它。
想象一下以下情况:
我有一个类,我们说MyApiClient
并且它有一个名为getListOfBooksWithCompletionHandler:(void (^))completion
的方法,其中在请求完成时调用完成块。到目前为止一切都很好。
内部MyApiClient
必须调用其他API的一些方法,这些方法不提供完成但是阻止,只调用委托调用。
这意味着我需要将回调块存储在某处,直到从其他API调用相应的委托方法。
在过去的项目中,我通过将回调块存储在NSMutableDictionary
中并使用某种唯一标识符在委托调用期间找到它来解决此问题。
这对我来说感觉就像不需要的样板代码一样,所以我的问题是:有没有最佳实践/ API更优雅地做到这一点?也许某种机制允许我存储具有特定ID的块并简单地触发将调用发送到块的信号?
使用谷歌和Apple的文档无法找到很多相关信息。有什么想法吗?
答案 0 :(得分:0)
我建议您将完成块存储在类的属性中
@property (nonatomic, copy) void (^completionHandler)(parameters ...);
为每个请求创建单独的实例。然后每个实例都可以保存块 和一个特定请求的其他状态信息。它也可以作为代表 对于"其他API"你正在使用。