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"); }); });
这里是派遣队列的文档