在NSRunLoop上,需要澄清

时间:2011-12-01 04:51:59

标签: objective-c delegates nsrunloop

当我

    Logger *logger = [Logger new];

    NSURL *url = [NSURL URLWithString:@"http://www.google.com"];
    NSURLRequest *request = [NSURLRequest requestWithURL:url];

    __unused NSURLConnection *conn = [[NSURLConnection alloc] 
            initWithRequest:request delegate:logger startImmediately:YES];

......没有任何反应。在我

之前不会调用委托方法
[[NSRunLoop currentRunLoop]run];

我原以为startImmediately:YES就是这么做的。

1 个答案:

答案 0 :(得分:4)

异步回调需要NSRunLoop。参见:

Cocoa: NSURLConnection not attempting an HTTP Request

命令行应用程序默认没有NSRunLoop - gui apps。

来自文档:http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html

initWithRequest:委托: 返回初始化的URL连接,并开始加载URL请求的数据。

- (id)initWithRequest:(NSURLRequest *)request delegate:(id < NSURLConnectionDelegate >)delegate
  

...为了使连接正常工作,调用线程运行   循环必须在默认的运行循环模式下运行。看到   scheduleInRunLoop:forMode:更改运行循环和模式。