Objective c 在main()中使用NSURLConnection时,为什么连接无法完成?

Objective c 在main()中使用NSURLConnection时,为什么连接无法完成?,objective-c,cocoa,Objective C,Cocoa,我现在正在测试。因为我想用它来创建一种命令工具行程序,所以我在main()函数中调用该方法,如下所示: int main (int argc, const char * argv[]) { @autoreleasepool { Uploader *upl = [Uploader alloc]; [upl initWithURL:[NSURL URLWithString:@"http://localhost/uploader.php"]

我现在正在测试。因为我想用它来创建一种命令工具行程序,所以我在main()函数中调用该方法,如下所示:

int main (int argc, const char * argv[])
{
    @autoreleasepool {
        Uploader *upl = [Uploader alloc]; 
        [upl initWithURL:[NSURL URLWithString:@"http://localhost/uploader.php"]
                filePath:@"/test.txt"
                delegate:upl
            doneSelector:@selector(onUploadDone)
           errorSelector:@selector(onUploadError)];
           //[[NSRunLoop currentRunLoop] run];   
   }
   return 0;
}
我发现它可以正常创建连接和post请求,但它无法完成连接,因为它根本不调用那些委托方法(connection:didReceiveResponse:connection:didReceiveData:connectionDidFinishLoading:)。
因此,我调用方法[[NSRunLoop currentlunloop]run]来运行循环(作为代码中的注释),然后一切正常。我不知道为什么。谁能给我解释一下吗?谢谢

runloop是一个大事件处理程序无限循环(在停止之前无限)。它监视各种源,当它们生成事件时,它将这些事件发送给侦听器。这是在单个线程上管理异步操作的一种非常有效的方法


NSURLConnection
(以及Cocoa中的许多其他内容)依赖于runloop进行处理。如果没有任何内容运行runloop,则不会处理事件。

谢谢!我想知道是否还有其他方法可以替代使用runloop?对于命令行应用程序,您可以使用
+sendSynchronousRequest:returningResponse:error:
,这是同步的(在完成之前阻塞),因此不需要runloop。