在我的应用程序中,如果我有一个已被释放的视图(通过模式关闭或导航堆栈弹出),然后我收到内存警告,我的应用程序崩溃。
我已经通过在我的应用程序中尽早放置模态创建/关闭进行测试,如下所示:
WWebViewController *webViewController = [[WWebViewController alloc] initWithPath:@"http://www.google.com"];
[webViewController setIsModal:YES];
WMainNavController *navController = [[WMainNavController alloc] initWithRootViewController:webViewController];
[self presentViewController:navController animated:YES completion:nil];
Web 视图非常简单:
- (void)viewDidLoad
{
[super viewDidLoad];
[self setNavigationDefaultsWithTitle:@"Loading..." withBackButton:YES withSearchButton:YES deepLinked:false];
webView = [[UIWebView alloc] initWithFrame:[self.view bounds]];
webView.delegate = self;
[self.view addSubview:webView];
[webView scalesPageToFit];
[webView loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:self.path]]];
[self showNoConnectionImageIfNecessary:NO];
// Do any additional setup after loading the view.
}
...
- (void)dealloc {
[webView loadHTMLString:@"" baseURL:nil];
[webView stopLoading];
[[NSURLCache sharedURLCache] removeAllCachedResponses];
[webView setDelegate:nil];
webView = nil;
}
但是,简单地呈现然后关闭该视图,然后模拟内存警告会给出:
*** -[WMainNavController retain]: message sent to deallocated instance 0xba953c0
我已经通过不使用 WMainNavController 直接调用 WWebViewController 进行了尝试,通过使用常规导航控制器进行了尝试,尝试简单地将某些内容推送到导航堆栈。如果我在应用程序的任何位置弹出或关闭视图,它总是会崩溃。
我在做一些根本错误的事情吗?如果我在不关闭/弹出的情况下通过应用程序进行处理,它可以很好地处理内存警告,并且在此之前只有一个屏幕将此屏幕显示为模式并且是程序的根视图。
我会提供任何需要的额外信息,有人见过这样的吗?
编辑——这是一个 ARC 实现。
编辑——这是我的带有僵尸的乐器的截图:
在我看来一切都很正常。它在解雇时正确解除分配,但由于某种原因,内存警告调用正试图访问该视图控制器。我完全不知所措。