asynchronous调用使用IOS的方法4

我想asynchronous调用一个方法。 这是从服务器获取HTML并将其设置为UIWebView的一种方法:

 NSString *htmlTest = [BackendProxy getContent]; [webView loadHTMLString:htmlTest baseURL: nil]; [webView setUserInteractionEnabled:YES]; 

我想在数据提取期间在UIWebView中启动一个活动指示器,所以我需要以asynchronous方式调用getContent 。 我怎样才能做到这一点?

我build议使用NSObject performSelectorInBackground:withObject:

如下所示:

 - (void)loadIntoWebView: (id) dummy { NSString *html = [BackendProxy getContent]; [self performSelectorOnMainThread: @selector(loadingFinished:) withObject: html]; } - (void)loadingFinished: (NSString*) html { // stop activity indicator [webView loadHTMLString:html baseURL: nil]; [webView setUserInteractionEnabled:YES]; } - (void) foo { // ... // start activity indicator [self performSelectorInBackground: @selector(loadIntoWebView:) withObject: nil]; } 

对于GCD,Apple的新(ish)并发API来说,这是一个很好的用例。

 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_async(queue, ^ { // Background work here NSLog(@"Finished work in background"); dispatch_async(dispatch_get_main_queue(), ^ { NSLog(@"Back on main thread"); }); }); 

这里是派遣队列的文档