所以是的,我是一个在这个疯狂的iPhone世界中的Java人。当谈到记忆管理时,我对自己在做什么没有很好的想法。如何通过导航控制器管理UIViewControllers?
我有一个使用导航控制器,当它的时间去到下一个视图我有一些代码,看起来像这样的应用程序:
UIViewController *myController = [[MyViewController alloc] initWithNibName:@"MyView"
bundle:[NSBundle mainBundle];
[[self navigationController] pushViewController:myController animated:YES];
现在根据苹果的内存管理
基本规则如果使用名称以“黄金”或“新”,或包含“复制”(例如,
alloc
,newObject
,或mutableCopy
),或者如果您发送的方法创建你需要一个对象的所有权它是一个retain
消息。您有责任放弃使用release
或autorelease
所拥有的物品的所有权。任何其他时间你收到一个对象,你不能释放它。
对我来说,这意味着我应该释放myController
,或给它一个autorelease
消息。但是,每当我尝试这样做的时候,我的应用程序在我将视图从堆栈中弹出并弹出时就会崩溃。
这听起来没有什么味道,但在运行仪器时声称我没有任何内存泄漏。
所以我我的问题是
- 我这样做对吗?
- 导航控制器是否取得了MyViewController的所有权,解释了内存泄漏的缺失?
- 我应该将myController分配给我的根ViewController中的实例变量吗?在这种情况下,它会被标记保留,我会在根的dealloc方法
我只是对比autorelease和release的使用。你可以在之前或之后自动释放,没关系,但是如果你释放,你必须在之后执行。 – 2008-11-26 19:53:31