3

我想要做的是得到以下方法的响应

 - (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { }

打电话后

NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
[conn scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[conn start];

在一个里面

dispatch_async();

但是该connection方法没有调用。但是当我NSURLConnection在它之外运行代码时,dispatch_async它会调用该方法。

这是什么原因,我该如何纠正?那是因为delegate引用selfself引用了后台线程而不是UIViewController类本身吗?

4

1 回答 1

0

由于您正在创建一个要在循环中安排并稍后启动的连接,因此请确保使用initWithRequest参数startImmediately设置为NO. 现在,您正在启动连接两次。而且,更重要的是,您是在将其安排在主运行循环中之前启动它的。

要解决此问题,请指定startImmediatelyNO

NSURLConnection *conn = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:NO];
[conn scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
[conn start];

话虽如此,我认为根本不需要将此代码分派到后台队列(因为initWithRequest异步运行并且不会对应用程序性能产生明显影响)。我使用上述模式的唯一一次是当我将我的NSURLConnection请求包装在一些自定义NSOperation子类中时(在这种情况下,上述模式非常有用)。但在这种情况下,这是不必要的。

于 2014-05-06T14:42:20.493 回答