【发布时间】:2014-11-26 13:17:51
【问题描述】:
我有一个已实现本地服务器的应用程序,它处理来自 Web 前端的请求。 UIWebView 呈现一些 GUI,用户进行一些交互,我处理他的请求并将响应发送回 webview。
有时我会收到一些请求,需要打开第二个 web 视图(例如用于 facebook 登录)并在当前方法中等待结果从第二个 web 视图返回。
当我在具有双核处理器的 iDevice 上运行这种情况时,它按预期工作。 但是当我在单核 iPhone 4 上运行它时,webview 处理会被阻止,直到我离开当前方法(带有等待指示符的白页)。
我通过为当前线程设置睡眠来解决这个问题,这样主线程就有时间处理他的运行循环中的事件(如果我正确理解的话)
- (void)requestProcessingMethod { // <-- on background thread
someCalculations ...
dispatch_sync(dispatch_get_main_queue(), ^{
[self displayFacebookLoginWebView];
});
while(!facebookReturnCondition){
[[NSRunLoop currentRunLoop] runUntilDate:[NSDate distantFuture]];
[NSThread sleepForTimeInterval:0.5]; // <-- on single core without this
// facebook webview will not load the login page
}
return response; //
}
我对此不满意。为睡眠设置线程看起来很糟糕。
有没有办法在不退出当前方法(后台线程)的情况下从后台线程添加工作 UIWebView?
或者是否可以手动切换/强制运行循环执行?
【问题讨论】:
标签: ios objective-c iphone uiwebview nsrunloop