웹 프런트 엔드의 요청을 처리하는 구현 된 로컬 서버가있는 응용 프로그램이 있습니다. UIWebView는 GUI를 제공하고 사용자는 상호 작용을하며 요청을 처리하고 응답을 웹뷰로 되돌려 보냅니다.현재 메서드를 종료하기 전에 새 UIWebView 내에서 페이지 내용을로드하는 방법
때때로 두 번째 웹보기 (예 : 페이스 북 로그인)를 열어 두 번째 웹보기에서 결과가 반환 될 때까지 기다려야하는 요청을 받고 있습니다.
듀얼 코어 프로세서가있는 iDevice에서이 케이스를 실행하면 예상대로 작동합니다. 하지만 단일 코어 iPhone 4에서 실행할 때 웹 뷰 처리는 현재 메서드 (대기중인 indcator가있는 흰색 페이지)를 벗어날 때까지 차단됩니다. 메인 쓰레드는 자신의 실행 루프에서 이벤트를 처리 할 시간이 있도록
- (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를 현재 방법 (배경 스레드)을 종료하지 않고 추가 할 수있는 방법이 있습니까?
수동으로 루프 실행을 전환하거나 강제 실행할 수 있습니까?