Objective c 在main()中使用NSURLConnection时,为什么连接无法完成?
我现在正在测试。因为我想用它来创建一种命令工具行程序,所以我在main()函数中调用该方法,如下所示: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"]
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。