所以,是的,我是这个疯狂的 iPhone 世界中的 Java 人。当谈到内存管理时,我仍然对自己在做什么不是很清楚。
我有一个使用导航控制器的应用程序,当该进入下一个视图时,我的代码如下所示:
UIViewController *myController = [[MyViewController alloc] initWithNibName:@"MyView"
bundle:[NSBundle mainBundle];
[[self navigationController] pushViewController:myController animated:YES];
现在根据Apple关于内存管理的基本规则
如果您使用名称以“alloc”或“new”开头或包含“copy”(例如,、、或)的方法创建对象,或者向其发送消息,则您将获得
alloc
对象newObject
的mutableCopy
所有权retain
。release
您有责任使用或放弃您拥有的对象的所有权autorelease
。任何其他时间您收到一个对象,您都不能释放它。
对我来说,这意味着我应该发布myController
,或者给它一个autorelease
信息。但是,每当我尝试这样做时,我的应用程序都会在我从堆栈中推送和弹出视图时崩溃。
这对我来说并不合适,但在运行 Instruments 时,它声称我没有任何内存泄漏。
所以我的问题是
- 我这样做对吗?
- 导航控制器是否获得了 MyViewController 的所有权,解释了没有内存泄漏?
- 我应该将 myController 分配给我的根 ViewController 中的实例变量吗?在这种情况下,它将被标记为保留,我将在根的 dealloc 方法中释放