首先,我从未在我的应用程序中看到如此多的内存问题,因为在阅读关于内存如何在obj-C中运行的文章后,我开始放置“自我”。现在,我得到各种问题(揭示了我的编码的sl iness)。当然,我是Objective-C的新手,我承认在我的人生之前,我从未有过很多与内存管理有关的问题。但我认为这需要习惯才能习惯。UINavigationViewController内存释放
现在,对我的问题。
我有一个类接口属性(self.todoCreate),它拥有对上述控制器的引用。通过按下按钮导航该控制器。
@property (nonatomic, retain) TodoTaskCreateController *todoCreate;
下面的代码是导致导航视图改变的片段:
TodoTaskCreateController *viewController = [[TodoTaskCreateController alloc]
initWithNibName:@"TodoTaskCreateController"
bundle:[NSBundle mainBundle]];
self.todoCreate = viewController;
[viewController release];
// slide-in todoCreate controller.
if (self.navigationController != nil && self.todoCreate != nil) {
[self.navigationController pushViewController:self.todoCreate animated:YES];
}
因此,这里是我的问题:
我第一次运行这个它的工作原理。 一旦我在第二个视图屏幕上,我回到主视图。 如果我尝试再次导航第二次,那么应用程序崩溃,在self.todoCreate
正在分配viewController
。
请注意,在主视图的viewDidAppear
方法中,我呼叫[self.todoCreate release]
。
任何人都可以解释这一点吗?
PS - 难怪这么多iPhone应用程序随机崩溃。
如果你做“自我”。todoCreate =`具有`retain`属性,旧值将被释放;如果您对`assign`属性执行相同的操作,则旧值不会被释放。 –
2009-08-02 22:02:32