Iphone 为什么这个对象在它之后就被释放了';它被实例化了吗?从一本书的例子I';我从以下方面学习:

Iphone 为什么这个对象在它之后就被释放了';它被实例化了吗?从一本书的例子I';我从以下方面学习:,iphone,objective-c,Iphone,Objective C,请注意这一行: BlueViewController *blueController = [[ BlueViewController alloc] initWithNibName:@"BlueView" bundle:nil]; self.blueViewController = blueController; [self.view insertSubview:blueController.view atIndex:0]; [blueController release]; 我猜blueVie

请注意这一行:

BlueViewController *blueController = [[ BlueViewController alloc] initWithNibName:@"BlueView" bundle:nil];
self.blueViewController = blueController;
[self.view insertSubview:blueController.view atIndex:0];
[blueController release];
我猜
blueViewController
属性是用retain属性定义的,因此您的对象拥有新创建的对象的所有权,然后在最后一行中释放,我们只是将对象的retain计数减少回1,以避免内存泄漏

注意这一行:

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

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

发布的
release
用于本地临时参考,由于
alloc
,该参考在本地拥有。在释放之前,它被传递给视图,视图将
保留它以供其自身使用,并传递给对象自己的
blueViewController
设置器,该设置器也将如此。

释放
用于本地临时引用,该引用因
alloc
而在本地拥有。在释放之前,它被传递给视图,视图将保留它以供自己使用,并传递给对象自己的
blueViewController
setter,setter也将保留它。

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

这是惯例。若将“temp”变量传递给setter或其他带有stores reference的方法,那个么这些方法将保留传递的对象。所以你在那之后释放它。如果临时对象是自动释放的,则不需要释放它。
请阅读self.blueViewController=blueController不仅仅是分配。它等于:
[self-setBlueViewController]由.m文件开头的
@synthesis blueViewController
指令生成。在此setter中,复制或保留传递给blueController的方法(取决于.h文件中的@Properties选项)。如果是复制的,你不需要原件。如果它被保留,则在
self.blueViewController=blueController之后保留计数等于2。通过释放
blueController
他们将retain counter设置为1

这是惯例。若将“temp”变量传递给setter或其他带有stores reference的方法,那个么这些方法将保留传递的对象。所以你在那之后释放它。如果临时对象是自动释放的,则不需要释放它。
顺便说一句,请阅读

,除非这个代码示例是与视图控制器包含一起完成的(从你的帖子日期来看,我想不是),否则我建议你扔掉那本书。如果此代码示例旨在演示如何在视图之间转换,那么将控制器的视图添加为子视图而不使用控制器本身是一种可怕的技术。哇,这本书提出了一些可怕的代码!顺便说一句,除非这个代码示例是与视图控制器包含一起完成的(从你的帖子日期来看,我想不是),否则我建议你扔掉那本书。如果此代码示例旨在演示如何在视图之间转换,那么将控制器的视图添加为子视图而不使用控制器本身是一种可怕的技术。哇,这本书提出了一些可怕的代码!