Ios 有没有可能;暂停“;一个线程,然后让另一个操作先进行?
我设置了2个UIWebView,第一个是控制第二个。他们通过ajax请求进行通信 我想在第二个WebView中加载一个网站,然后继续执行其他任务。不幸的是,这是崩溃。它正在崩溃,因为Web线程在收到响应后立即被第一个线程占用。第二个没有时间加载网页,导致死锁 我想延迟响应,直到第二个WebView完全加载网页。当前,第二个WebView在第一个WebView获得响应后立即开始加载(这是Web线程被释放的时候) 是否可以“暂停”/“暂停”当前(第一个WebView)执行,直到第二个WebView完成加载?这意味着也要开始执行第二个WebView 活动:Ios 有没有可能;暂停“;一个线程,然后让另一个操作先进行?,ios,objective-c,multithreading,Ios,Objective C,Multithreading,我设置了2个UIWebView,第一个是控制第二个。他们通过ajax请求进行通信 我想在第二个WebView中加载一个网站,然后继续执行其他任务。不幸的是,这是崩溃。它正在崩溃,因为Web线程在收到响应后立即被第一个线程占用。第二个没有时间加载网页,导致死锁 我想延迟响应,直到第二个WebView完全加载网页。当前,第二个WebView在第一个WebView获得响应后立即开始加载(这是Web线程被释放的时候) 是否可以“暂停”/“暂停”当前(第一个WebView)执行,直到第二个WebView完
- 你试过这样的东西吗
- (void)viewDidLoad
{
[super viewDidLoad];
self.webView.delegate = self;
self.webView2.delegate = self;
[self.webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"yourURL"]]];
}
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
if (webView == self.webView)
{
if (!self.webView.isLoading)
{
[self.webView2 loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"yourURL"]]];
}
}
}
是的,最好的两种方法是使用
grandcentraldispatching(GCD)
或NSOperation
和NSOperationQueue
关于这一点的解释很长,但我会指导你阅读类似的内容。如果你在谷歌上搜索这些术语,你可以找到很多其他资源。现在,这可能需要一些调整,但它应该给你一个好的起点 基本上,我们创建了一个并发GCD队列,并调度2个异步调用,以加载包含2个不同URL内容的HTML字符串 当请求完成时,它们会将html字符串加载到web视图中。请注意,只有在第二个UIWebView已经加载的情况下,第一个UIWebView才会加载其数据
__weak ViewController *bSelf = self;
dispatch_queue_t webQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0ul);
dispatch_async(webQueue, ^{
NSError *error;
bSelf.html1 = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://google.com"] encoding:NSASCIIStringEncoding error:&error];
if( !bSelf.secondLoaded)
{
dispatch_sync(dispatch_get_main_queue(), ^{
[bSelf.webView1 loadHTMLString:bSelf.html1 baseURL:nil];
});
}
});
dispatch_async(webQueue, ^{
NSError *error;
bSelf.html2 = [NSString stringWithContentsOfURL:[NSURL URLWithString:@"http://amazon.com"] encoding:NSASCIIStringEncoding error:&error];
bSelf.secondLoaded = YES;
dispatch_sync(dispatch_get_main_queue(), ^{
[bSelf.webView2 loadHTMLString:bSelf.html2 baseURL:nil];
if( bSelf.html1 != nil )
{
[bSelf.webView1 loadHTMLString:bSelf.html1 baseURL:nil];
}
});
});
谢谢你的回答!这也帮了大忙。尤其是链接。我选择了答案,因为它马上给了我一个例子