在我的标签栏应用中内存不足的地方:
- (void)webViewDidFinishLoad:(UIWebView *)webView {
pageText = [NSString stringWithFormat:[webView stringByEvaluatingJavaScriptFromString:@"document.body.innerHTML"]];
pageText行导致崩溃。如果我将这一行注释掉,那么就不会崩溃,并且我认为这不是pageText NSString有问题。
我认为这是在webViewDidFinishLoad的最终实例上,看起来好像在webViewDidFinishLoad完成之前已经发布了一些东西吗?
还是没有针对此webViewDidFinishLoad的document.body.innerHTML?
有任何想法吗?
提前致谢,
ade。
最佳答案
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
。防守。