http://blog.prosight.me/index.php/2009/10/425
先看代码:
IMGView *imgView =
[[IMGView alloc
] initWithFrame:CGRectMake
(
10,
0,
300,
300
)];
[self.view addSubview:imgView ];
[imgView release ];
[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)。上述的做法也是为了符合这一准则。