在我的标签栏应用程序中,内存不足:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
pageText = [NSString stringWithFormat:[webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"]];
pageText行导致崩溃。如果我注释掉这一行,那么就没有崩溃,我认为这不是pageText NSString的错误。
我认为这是在webViewDidFinishLoad的最后一个实例上,看起来在webViewDidFinishLoad完成之前它正在发布?
或者这个webViewDidFinishLoad没有document.body.innerHTML?
任何想法?
提前感谢,
ADE。
答案 0 :(得分:3)
stringByEvaluatingJavaScriptFromString:
会返回自动释放的NSString
。您无需使用stringWithFormat:
。您的代码也没有有效的格式。
pageText = [NSString stringWithFormat:@"%@", [webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"];
会更正格式错误,但是因为您正在分配pageText
,所以由于自动释放,您可能会遇到崩溃的风险。
以下是所有必要的。 注意:我假设Javascript是有效的....
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
[pageText release], pageText = nil;
pageText = [[webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"] retain];
if (!pageText)
// innerHTML was empty
pageText = [[webView stringByEvaluatingJavaScriptFromString:@"document.body"] retain];
}
请注意,添加保留是因为您要分配pageText
ivar而不是使用setter。确保在dealloc中添加[pageText release];
以防止泄漏。
尝试访问代码中其他地方的pageText
时要非常小心,因为它仍然可能是nil
。 要防守。