gpt4 book ai didi

objective-c - 当我用 webview 显示 viewcontroller 时 SIGKILL

转载 作者:行者123 更新时间:2023-11-28 20:32:55 31 4
gpt4 key购买 nike

我有 ios 应用程序。一些 View Controller 包含 webview。 一切正常,除了一个问题:

当应用程序启动并且我有几分钟没有使用它并继续我的工作时,它工作正常,但是当我想用 webview 加载 viewcontroller 时,它因 SIGKILL 错误而崩溃。休息后其他 View Controller 没有问题。这是我用于 WebView 的代码:

_webView = [[UIWebView alloc] initWithFrame:self.view.bounds)];
[self.view addSubview:_webView];
_webView.userInteractionEnabled = NO;
[_webView release];
// here is the local page, the same happens if i load internet page..
NSString *path = [[NSBundle mainBundle] pathForResource:@"localpage" ofType:@"html"];
_url = [NSURL fileURLWithPath:path];
[_webView loadRequest:[NSURLRequest requestWithURL:_url]];

所以问题是为什么应用程序在中断后仅尝试使用 webview 加载 viewcontroller 时崩溃?

谢谢。

最佳答案

你的代码很危险:

_webView = [[UIWebView alloc] initWithFrame:self.view.bounds)];
[self.view addSubview:_webView];
_webView.userInteractionEnabled = NO;
[_webView release];

我假设 _webView 是一个 ivar。首先,除了在 init 和 dealloc 中,不要直接访问你的 ivars。直接访问 ivar 是导致崩溃的第一大原因。做错事太容易了,而你在这里做错了。在你完成它之前,你正在释放你的 ivar。您打赌 View 会为您保留它,这可能会发生也可能不会发生。例如,如果 View 已卸载(当您离开屏幕时可能会发生这种情况),则 _webView 会变成一个悬挂指针。这里正确的代码是(假设 webView 是一个 retain 属性):

self.webView = [[[UIWebView alloc] initWithFrame:self.view.bounds)] autorelease];
[self.view addSubview:self.webView];
self.webView.userInteractionEnabled = NO;

您还保留了_url,如果您在此代码之外访问_url,可能会导致崩溃。同样,切换到访问器将解决这个问题。

self.url = [NSURL fileURLWithPath:path];
[self.webView loadRequest:[NSURLRequest requestWithURL:self.url]];

请注意,如果您切换到 ARC,这个问题和许多其他问题很容易消失。除了更容易编写和更少的崩溃之外,ARC 代码几乎总是比等效的正确编写的手动内存管理更快。除非必须支持 iPhoneOS 3,否则绝对应该切换到 ARC。

关于objective-c - 当我用 webview 显示 viewcontroller 时 SIGKILL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11594774/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com