如何在这个NSOperation实例中调用NSURLConnection的委托协议方法?

时间:2015-01-15 10:27:23

标签: ios nsurlconnection

你好我在iOS测试中完成了这个QCM。我的选择是B.而且这是错的。我希望有人能帮助我理解。先感谢您。

以下是问题: NSURLConnection实例在并发NSOperation的“start”方法的实现中创建并启动。

在此NSOperation实例中应该更改哪些NSURLConnection的委托协议方法调用?

-(void)start{
  ...
  _connection = [[NSURLConnection alloc] initWithRequest: request delegate:self      startImmediately:NO];
  [_connection scheduleInRunloop: [NSRunLoop mainRunLoop] forMode:NSRunLoopCommonModes];
  [_connection start];
  ... }
-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
  {
  NSLog(@"Called"); }

提供三个答案: 答:将startImmediately设置为YES

B:将此代码包装到dispatch_async(dispatch_get_current_queue(),^ {});

C:没有,didReceiveResponse将被调用。

1 个答案:

答案 0 :(得分:0)

此代码示例(选项C)无需更改。

startImmediately设置为YES(选项A)只会在相应的运行循环上安排连接之前启动连接,这会导致问题。

理论上,您可以将连接的创建分配给主线程(选项B),从而无需在主运行循环上手动调度它。但是你的代码示例(在主运行循环上手动调度它)完成了同样的事情,并且是更常见的模式。

最重要的是,您现有的代码示例很好。