在我的标签栏应用中内存不足的地方:

- (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。防守。

10-08 05:54