Obj-C内存管理:为什么这不起作用?

时间:2010-04-09 22:02:50

标签: iphone objective-c cocoa-touch memory-management

为什么以下代码不起作用?

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

据我了解,只要窗口需要,myWindow就应该保留viewController.view。那么为什么这会导致我的应用在发布时崩溃? (注释掉最后一行可以解决问题,正如预期的那样)

1 个答案:

答案 0 :(得分:9)

[viewController release];

您正在发布viewController而不是视图。 myWindow将保留您传入的视图,但不保留视图控制器本身,这会导致它被取消分配。

由于视图控制器在初始化view时保留myWindow,然后在viewController添加{{1}}时保留{{1}},我认为崩溃是因为后续调用了{{1}}(现在将被解除分配。)