Ton*_*ony 4 asynchronous ios4 ios
我想异步调用一个方法.这是一种从服务器获取HTML并将其设置为以下内容的方法UIWebView:
NSString *htmlTest = [BackendProxy getContent];
[webView loadHTMLString:htmlTest baseURL: nil];
[webView setUserInteractionEnabled:YES];
Run Code Online (Sandbox Code Playgroud)
我想UIWebView在数据获取期间启动一个活动指示器,所以我需要getContent异步调用.我怎样才能做到这一点?
cob*_*bal 14
这是Apple的新(ish)并发API GCD的一个很好的用例.
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");
});
});
Run Code Online (Sandbox Code Playgroud)
这是关于调度队列的文档
我建议performSelectorInBackground:withObject:的NSObject.
如下:
- (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];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7761 次 |
| 最近记录: |