为什么这个对象在实例化后立即发布?从我正在学习的书籍例子中:

时间:2010-06-02 21:17:20

标签: iphone objective-c

BlueViewController *blueController = [[ BlueViewController alloc] initWithNibName:@"BlueView" bundle:nil];
self.blueViewController = blueController;
[self.view insertSubview:blueController.view atIndex:0];
[blueController release];

3 个答案:

答案 0 :(得分:2)

请注意以下这一行:

self.blueViewController = blueController;

我的猜测是使用retain属性定义的blueViewController属性,因此您的对象获取新创建的对象的所有权,然后在最后一行释放,我们只是将对象的保留计数减少回1以避免内存泄漏。

答案 1 :(得分:1)

release用于本地临时引用,由于alloc而在本地拥有。在发布之前,它会被传递给视图,它将retain用于它自己的目的,并传递给对象自己的blueViewController setter,它同样也是。

答案 2 :(得分:1)

self.blueViewController = blueController;不仅仅是作业。它等于: 在.m文件开头由[self setBlueViewController];指令生成的@synthesize blueViewController。在这个setter方法中,传递的blueController被复制或保留(取决于.h文件中的@propertioes选项)。如果它被复制 - 你不需要原创的。如果保留,则在self.blueViewController = blueController;等于2后保留计数。通过释放blueController,他们将保留计数器设置为1.

这是常见的做法。如果将“temp”变量传递给setter或带有store referense的其他方法,那么这些方法将保留传递的对象。所以你在那之后发布它。如果你的temrorary对象是自动释放的,那么你不需要释放它。 请阅读Memory Management Guide