我的图书馆强制执行顺序暴露的API 2如下到:使用dispatch_sync
-(void) createFile{
dispatch_sync(queueSerial, ^{ //B1
[fileObj createFileInfo:file completion:^(NSError *error){
//execute completion block C1
}];
});
}
-(void) readFile:(NSData*)timeStamp{
dispatch_async(queueSerial, ^{ //B2
[fileObj readFileInfo:fileName completion:^(NSError *error) {
dispatch_async(queueSerial2, ^{
//execute completion block C2
});
}]
});
}
两个readFile
和createFile
是异步方法。
我通常会推荐给使用我的图书馆的人在readFile
之前致电createFile
。但是,不能保证呼叫者将如何最终实现这一点。它通常被用以下方式调用(和我已经在这个没有控制)
[fileClass createFile];
[fileClass readFile:timeStamp];
我想要做的是,确保在执行completion block C1
后readFile
被调用。我也不想阻止主线程createFile
(但这种期望可以放松)。所以我想达到的最终结果是:
- 来电(我没有控制权)调用
createFile
和电话readFile
createFile
完全执行后,立即完成块C1
被解雇, 之后,readFile
被派遣去做它的事情。
我该如何做到这一点?
@Rob感谢您的洞察力。在这一点上,我是一个刚刚起步的人(在Obj C中),所以我会尽力遵循你的建议。 – ExceptionHandler
'readFile'如何传回它读取的数据?它被定义为返回'void',所以它必须使用完成处理程序或委托模式? – Rob
@Rob'readFile'传递完成处理程序C2中的数据(错误值,如果有的话)。我不确定这些部分是否相关。 – ExceptionHandler