【发布时间】:2013-11-27 15:44:59
【问题描述】:
基于earlier 问题:
我有一个看起来像这样的NSOperationQueue:
NSBlockOperation *block1 = [NSBlockOperation blockOperationWithBlock:^{
[someObject someSelector];
}];
NSBlockOperation *block2= [NSBlockOperation blockOperationWithBlock:^{
[someObject anotherSelector];
}];
[block2 addDependency:block1];
[queue addOperation:block1];
[queue addOperation:block2];
现在,在someSelector 里面我有:
returnData = [requesterObj getDataWithURL:(NSString*)url];
getDataWithURL 包含以下内容:
NSURL *requestUrl = [NSURL URLWithString:strUrl];
NSMutableURLRequest *request = [NSMutableURLRequest requestUrl cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:timeout];
NSError *requestError;
NSURLResponse *urlResponse = nil;
NSData *urlData = [NSURLConnection sendSynchronousRequest:request returningResponse:&urlResponse error:&requestError];
现在,当我添加断点时,似乎在第一个块的 NSURLConnection 完成之前调用了第二个块。大概是因为对getDataWithURL 的调用本身是异步的。确保在该请求返回之前第一个块没有完成的最佳方法是什么。我应该尝试使用NSInvocation 将数据放入returnData 中吗?
【问题讨论】:
-
这应该通过正确设置依赖关系来解决。在发布的代码中,您正在 开始 阻止操作而不设置依赖关系!那么 Assume that I have set up dependencies... 是什么意思?您可以在设置它们的位置发布相关代码吗?
-
否,依赖项设置正确。问题是
NSBlockOperation无法知道异步请求尚未完成——它假定所有内容在块结束后都已完成。
标签: ios objective-c nsurlconnection nsoperationqueue