所以我的代码是这样的:
ArticleControllerController *ac = [[ArticleControllerController alloc] init];
ac.categoryIndex = idx;
NSLog(@"acc retain: %d", [ac retainCount]);
[app.nav pushViewController:ac animated:NO];
NSLog(@"acc retain: %d", [ac retainCount]);
[ac release];
NSLog(@"acc retain: %d", [ac retainCount]);
我得到:
[2649:207] acc retain: 1
[2649:207] acc retain: 3
[2649:207] acc retain: 2
如何解决这个烂摊子?我不明白我做错了什么,这部分有时会由于内存不足而导致应用程序崩溃。
编辑:相关问题。
所以情况和上面定义的一样,但问题是 ArticleControllerController 的 dealloc 方法永远不会被调用。
更多代码:
- (void) navigateToNewsCategoryByIndex:(int)idx {
[app.nav popViewControllerAnimated:NO];
currentMode = MODE_ARTICLE;
ArticleControllerController *ac = [[ArticleControllerController alloc] init];
ac.categoryIndex = idx;
[app.nav pushViewController:ac animated:NO];
[ac release];
return ;
}
如果此方法重复多次 ArticleControllerController 创建大量各种界面元素,但它的 dealloc 方法永远不会释放它们(保留计数永远不会下降到零),所以我认为这就是我试图解决的内存崩溃问题现在几天。
那是怎么回事?我可以做更多的事情来解决这个问题吗?