我知道启动线程进行网络请求会使代码变得更加丑陋,所以可能需要调用performSelectorOnMainThread:
方法来调用代理方法。
在iOS编程中,我知道如何使用它并且它非常好用。但是,我想知道如何在没有UIApplication处理事件等情况下,在命令行实用程序中让它工作。
我已经尝试过,似乎异步调用返回时程序立即退出,而委托方法无法被调用。我希望深入了解它是如何工作的。
我知道启动线程进行网络请求会使代码变得更加丑陋,所以可能需要调用performSelectorOnMainThread:
方法来调用代理方法。
在iOS编程中,我知道如何使用它并且它非常好用。但是,我想知道如何在没有UIApplication处理事件等情况下,在命令行实用程序中让它工作。
我已经尝试过,似乎异步调用返回时程序立即退出,而委托方法无法被调用。我希望深入了解它是如何工作的。
int main(int argc, char *argv[])
{
// ...
NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:del startImmediately:YES];
CFRunLoopRun(); // Run this run loop, run!
// ...
}
接着,当连接表示已完成时,委托可以停止运行循环:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
// This returns control to wherever you called
// CFRunLoopRun() from, so you can still clean up
// or do other interesting things.
CFRunLoopStop(CFRunLoopGetCurrent());
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
NSLog(@"Error: %@", error);
CFRunLoopStop(CFRunLoopGetCurrent());
}
+sendSynchronousRequest:returningResponse:error:
,因为与此同时没有其他需要做的事情(例如,允许用户点击按钮)。 - jscs