Ich habe eine UITableView
, die YouTube-Daten wie Videotitel und Datum anzeigt. Ich zeige auch eine UIWebView
(75x75px) für jede UITableViewCell
, die eine HTML-Zeichenfolge lädt.YouTube UITableView-Zellen mit UIWebView blockierendem Thread?
hier ist der zugehörige Code für - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
:
UIWebView *iconView = (UIWebView*)[cell.contentView viewWithTag:2];
[self embedYouTube:videoUrl frame:CGRectMake(0, 0, 75, 75) webView:iconView];
und die embedYouTube
Funktion:
- (void)embedYouTube:(NSString*)url frame:(CGRect)frame webView:(UIWebView*)webView {
if([loadedIconsArray containsObject:webView])
return;
NSString *youTubeVideoHTML = @"<html><head>\
<body style=\"margin:0\">\
<embed id=\"yt\" src=\"%@\" type=\"application/x-shockwave-flash\" \
width=\"%0.0f\" height=\"%0.0f\"></embed>\
</body></html>";
NSString *html = [NSString stringWithFormat:youTubeVideoHTML, url, frame.size.width, frame.size.height];
[webView loadHTMLString:html baseURL:nil];
[loadedIconsArray addObject:webView];
}
loadedIconsArray
ist ein NSMutableArray
das Problem:
Wenn i lo Wenn ich meine YouTube-Ansicht anzeige, scheint der Hauptthread blockiert zu sein, während diese UIWebView
Objekte den HTML-Code laden. Nach ein paar Sekunden funktioniert alles wie erwartet. Ich stelle fest, dass ich diese Verzögerung erst nach der ersten Installation der Anwendung erfahre. Alle anderen Application/View-Starts funktionieren einwandfrei.
Warum erfahre ich diese "Verzögerung" oder Thread-Blockierung?
Wie kann ich es vermeiden?
Wie ich in meiner Antwort erwähnte, wird der Code in Frage nicht eine synchrone Netzwerk-Anforderung auf dem Haupt-Thread ausführen. –
Ihr Code führt keinen synchronen Aufruf durch. Recht. Aber ich denke, dass das innere Objekt synchron geladen wird. Natürlich ist dies zu überprüfen. Sie könnten versuchen, zu sehen, wann die Auslastung mit einem UIWebView-Delegaten beginnt. –