【发布时间】:2012-01-20 07:44:32
【问题描述】:
我正在重写回调方法以处理 HTTP 请求的响应。
-(NSObject<HTTPResponse> *)httpResponseForMethod:(NSString *)method URI:(NSString *)path{
NSObject <HTTPResponse> *response;
// Here I should load the data
}
但是,在我的请求中,我必须加载一些只能异步工作的数据:
- (void)assetForURL:(NSURL *)assetURL resultBlock:(ALAssetsLibraryAssetForURLResultBlock)resultBlock failureBlock:(ALAssetsLibraryAccessFailureBlock)failureBlock;
由于我使用的是同步方法,因此在获得数据之前我不能“离开”该方法。此外,我无法预加载所需的数据,因为在我进入请求之前我不知道需要哪个资产。
这对我来说似乎是一个相当棘手的设计问题,如果没有一些重大的黑客攻击,我看不到如何解决这个问题的解决方案。
【问题讨论】:
-
您是否有机会更改强制您的 HTTP 请求同步的对象? HTTP 请求永远不应该是同步的。如果你不能这样做并且你真的必须解决这个问题,你可以创建并运行一个运行循环,直到请求完成。但我认为这属于您(正确地)希望避免的“主要黑客”类别。
-
@stevex 我将不得不调查是否可以异步进行 HTTP 调用。即使它很hacky,您能否展示我必须如何执行“等待循环”。我以前也遇到过同样的问题,有时我不介意委托回调是否需要一些时间(它甚至可能不在主线程上)所以一个例子会很方便,我不知道怎么做那些街区。
标签: iphone ios architecture objective-c-blocks