Obj-C内存管理:为什么这不起作用?
问题描述:
为什么下面的代码不工作?Obj-C内存管理:为什么这不起作用?
MyViewController *viewController = [[MyViewController alloc] init];
[myWindow addSubview:viewController.view];
[viewController release];
据我了解,myWindow
应保留viewController.view
只要窗口需要它。那么为什么这会导致我的应用程序在启动时崩溃? (注释掉最后一行解决问题,如预期)
答
[viewController release];
您正在释放viewController
而不是视图。 myWindow
将保留您传入的视图,但不保留视图控制器本身,这会导致它被释放。
由于view
由视图控制器保留时,它被初始化,然后通过myWindow
保留当您添加它,我想象中的大跌是因为viewController
后续调用(现在将被释放)的。