关于release的用法

来源:互联网 发布:数据库函数的使用 编辑:程序博客网 时间:2024/05/16 00:36

1.头文件中声明的对象要在- (void) dealloc方法中release掉.

原因:创建这个对象时已经为这个对象分配了空间.

2.release对象不可以通过[NSString stringwithString]创建的对象.但是可以用于NSString *str=@"";

3.传递对象时注意的release 问题:主要有两种情况.self.a= 和a=两种情况.对于前者可使用autorelease ;对于后者在传值之前不能release

4.放到数组array或者字典dictionary中的对象可将release的所有权交给数组,或是字典.

原因:把对象放到数组中会使该对象的retaincount增加1,如无特殊需求可在添加到数组之后,将该对象release 掉或者设置autorelease.

注意:view 的addSubview也是将对象放到数组中,所以可将其release掉把release的权利交由数组.

5.autorelease实在赋值后或者是将第一相应者传递之后调用的,如果设置了autorelease对象在nsautoreleasepool中,则该对象随着[pool release]一起释放.UITableviewCell 可设置为autorelease.例如navigation 栈中popviewController,dismissModleviewController等.

6.UINavigationController执行push时会产生push的viewController的retaincount的增加,在push执行之后又会回复.UIAlertview执行show方法时候,也会产生retaincount增加,所以在[alertview release] 之后还可以相应事件.

7.copy NSString 或者NSArray都继承NSCoping接口.所以在执行copy时会分配另一块空间.

要使普通的对象也执行copy方法,可让该对象的类继承NSCoping接口.然后实现- (id) copywithZone:(nszone *) zone 方法,即可.

原创粉丝点击