为什么要在addsubview:一个view对象后,release它

来源:互联网 发布:python自动化测试代码 编辑:程序博客网 时间:2024/06/04 23:23

http://blog.prosight.me/index.php/2009/10/425

 

先看代码:

IMGView *imgView = [[IMGView alloc] initWithFrame:CGRectMake(100300300)];
[self.view addSubview:imgView];
[imgView release];
 

为什么imgView要release呢?可能很多人跟我一样,之前不是很清楚。 我们逐行分析一下

第一行,alloc一次,imgView对象retainCount为1,
第二行,addSubview一次,此方法会把你传过去的对象retain一次,那么此时它的retainCount为2。self.view变为它的第二个待有者。参考:The receiver retains view. If you use removeFromSuperview to remove view from the view hierarchy, view is released.

关于上面这段话,之前只是假象addSubView回保存实例,所以需要release之前的,但是不知道为什么,看来上面的话可以确实之前的假象是基本可行的,同时也想到了一个验证 的方法,即在每次不能确定的地方后面查看该实例的retainCount,或者差文档,之前没想到查看retaincount。
第三行,调用release方法,此处释放对imgView的所有权,retainCount减1。

到语言句尾imgView的所有者只剩下self.view,并且它的retainCount仅为1。内存管理第一铁则,谁retain(alloc,copy)谁release(autorelease)。上述的做法也是为了符合这一准则。

0 0
原创粉丝点击