Objective c 当我用webview显示viewcontroller时,SIGKILL
我有ios应用程序。某些视图控制器包含网络视图除了一个序言外,一切都很好: 当应用程序启动时,我有几分钟没有使用它,然后继续工作,它工作正常,但当我想用webview加载viewcontroller时,它会崩溃,并出现SIGKILL错误。中断一段时间后,其他ViewController没有问题。 以下是我用于WebView的代码:Objective c 当我用webview显示viewcontroller时,SIGKILL,objective-c,ios,uiwebview,sigkill,Objective C,Ios,Uiwebview,Sigkill,我有ios应用程序。某些视图控制器包含网络视图除了一个序言外,一切都很好: 当应用程序启动时,我有几分钟没有使用它,然后继续工作,它工作正常,但当我想用webview加载viewcontroller时,它会崩溃,并出现SIGKILL错误。中断一段时间后,其他ViewController没有问题。 以下是我用于WebView的代码: _webView = [[UIWebView alloc] initWithFrame:self.view.bounds)]; [self.view addSubvi
_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];
我假设\u webView
是一个ivar。首先,除非在init和dealloc中,否则不要直接访问IVAR。直接ivar访问是导致崩溃的#1原因。做错事太容易了,而你在这里做错事了。你在完成ivar之前就已经释放了。你赌的是为你持有的观点,这可能会发生,也可能不会发生。例如,如果视图被卸载(当您离开屏幕时可能发生),则\u webView
将成为一个悬空指针。这里正确的代码是(假设webView
是retain
属性):
您还保留了\u url
,如果您在此代码之外访问\u url
,可能会导致崩溃。同样,切换到访问器将解决这一问题
self.url = [NSURL fileURLWithPath:path];
[self.webView loadRequest:[NSURLRequest requestWithURL:self.url]];
请注意,如果切换到ARC,此问题和其他许多问题都会很容易解决。ARC代码除了更容易编写、崩溃更少之外,几乎总是比同等的正确编写的手动内存管理更快。除非您必须支持iPhoneOS 3,否则您绝对应该切换到ARC。您的代码非常危险:
_webView = [[UIWebView alloc] initWithFrame:self.view.bounds)];
[self.view addSubview:_webView];
_webView.userInteractionEnabled = NO;
[_webView release];
我假设\u webView
是一个ivar。首先,除非在init和dealloc中,否则不要直接访问IVAR。直接ivar访问是导致崩溃的#1原因。做错事太容易了,而你在这里做错事了。你在完成ivar之前就已经释放了。你赌的是为你持有的观点,这可能会发生,也可能不会发生。例如,如果视图被卸载(当您离开屏幕时可能发生),则\u webView
将成为一个悬空指针。这里正确的代码是(假设webView
是retain
属性):
您还保留了\u url
,如果您在此代码之外访问\u url
,可能会导致崩溃。同样,切换到访问器将解决这一问题
self.url = [NSURL fileURLWithPath:path];
[self.webView loadRequest:[NSURLRequest requestWithURL:self.url]];
请注意,如果切换到ARC,此问题和其他许多问题都会很容易解决。ARC代码除了更容易编写、崩溃更少之外,几乎总是比同等的正确编写的手动内存管理更快。除非您必须支持iPhoneOS 3,否则绝对应该切换到ARC。哪个viewController支持WebView?您是如何加载它的?哪个viewController带有WebView?你是怎么装的?