2010-04-09 76 views
0

为什么下面的代码不工作?Obj-C内存管理:为什么这不起作用?

MyViewController *viewController = [[MyViewController alloc] init]; 
[myWindow addSubview:viewController.view]; 
[viewController release]; 

据我了解,myWindow应保留viewController.view只要窗口需要它。那么为什么这会导致我的应用程序在启动时崩溃? (注释掉最后一行解决问题,如预期)

回答

9
[viewController release]; 

您正在释放viewController而不是视图。 myWindow将保留您传入的视图,但不保留视图控制器本身,这会导致它被释放。

由于view由视图控制器保留时,它被初始化,然后通过myWindow保留当您添加它,我想象中的大跌是因为viewController后续调用(现在将被释放)的。