0

我在我的应用程序中使用 LazyLoader 有一个加载图像的列表,我想在数据库中添加图像时更新这个列表。我使用 NSURLConnection 加载图像

4

1 回答 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 回答