oc-set方法内存管理 和 @property的参数

想一个对象中 连续两次set某个对象,会造成先set的对象 没有release,造成内存没有释放。

 

 

 

 

 1 /*
 2  内存管理代码规范:
 3  1.只要调用了alloc,必须有release(autorelease)
 4    对象不是通过alloc产生的,就不需要release
 5  
 6  2.set方法的代码规范
 7  1> 基本数据类型:直接复制
 8  - (void)setAge:(int)age
 9  { 
10     _age = age;
11  }
12  
13  2> OC对象类型
14  - (void)setCar:(Car *)car
15  {
16     // 1.先判断是不是新传进来对象
17     if ( car != _car )
18     {
19         // 2.对旧对象做一次release
20         [_car release];
21  
22         // 3.对新对象做一次retain
23         _car = [car retain];
24     }
25  }
26  
27  3.dealloc方法的代码规范
28  1> 一定要[super dealloc],而且放到最后面
29  2> 对self(当前)所拥有的其他对象做一次release
30  - (void)dealloc
31  {
32     [_car release];
33     [super dealloc];
34  }
35  */

 

不管对象是怎么产生的,只要没有alloc,就不需要写release;例如:

NSString *s = @"oc";

 

在类的声明中使用

 1 @property (retain) Book *book; 

就想当于告诉编译器,set方法中生成如下代码:

1 - (void)setBook:(Book *)book
2  {
3       if(book != _book){
4           [_book release];
5          
6           _book = [book retain];
7      }        
8    
9  }    

而不是单纯的生成

- (void)setBook:(Book *)book
{
    _book = book;
} 

 

 

转载于:https://www.cnblogs.com/My-Cloud/p/4495946.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值