我在我的应用程序中使用 LazyLoader 有一个加载图像的列表,我想在数据库中添加图像时更新这个列表。我使用 NSURLConnection 加载图像
问问题
442 次
1 回答
2
恕我直言,最简单的选择是将您的代码放在一个块中并让它异步执行。这样你就可以保持简单的流程。
为此,请使用:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
^{
// INSERT YOUR CODE HERE
// Whatever you put in here will be executes asynchronously.
});
针对 OP 的评论进行编辑:
NSURLConnection 的方法:
- (id)initWithRequest:(NSURLRequest *)request delegate:(id < NSURLConnectionDelegate >)delegate
不能使用。根据文档:
连接的委托对象。随着加载的进行,委托将接收委托消息。发送给委托的消息将在调用此方法的线程上发送。默认情况下,要使连接正常工作,调用线程的运行循环必须在默认运行循环模式下运行。请参阅 scheduleInRunLoop:forMode: 以更改运行循环和模式。
解决方案是使用:
+ (NSData *)sendSynchronousRequest:(NSURLRequest *)request returningResponse:(NSURLResponse **)response error:(NSError **)error
为了执行同步加载,调用线程中不需要特殊的线程或运行循环配置。
或使用:
+ (void)sendAsynchronousRequest:(NSURLRequest *)request queue:(NSOperationQueue *)queue completionHandler:(void (^)(NSURLResponse*, NSData*, NSError*))handler
带有块完成处理程序。
注意:
如果要执行的任务仅在请求完成后完成(例如调用委托),那么sendAsynchronousRequest:queue:completionHandler:
是最好的选择。
于 2013-04-16T10:43:42.263 回答