黑马程序员---OC set方法的内存管理

.set方法的内存管理


set方法的内存管理当然也要遵守内存管理的一下原则:

当时用alloc或者new 创建一个对象,就必调用release 或autorelease

1.你想使用(占用)某个对象,就应该让对象的计数器+1(让对象做一次retain操作)

2.你不想再使用(占用)某个对象,就应该让对象的计数器-1(让对象做一次release

3.retain,谁release

4.alloc,谁release

当一个人拥有一个 书的对象后,需要在实现中如下操作:

#import "Person.h"

@implementation Person

- (void)setBook:(Book *)book

{

//1.先判断是不是新传进来的对象 

    if(book != _book)

    {

        [_book  release];//若没有旧对象,则没有影响

        _book = [book retain];//对新对象做一次retain

    }

}

- (void)dealloc

{

    [_book release];

    NSLog(@"Person对象被回收");

    [super dealloc];  

}  

@end


set方法在使用中经常会存在如下的问题:


1)set方法写法(一)


原对象无法释放造成的内存泄露

-(void)setCar:(Car*)car{

_car= [car retain];

2)set方法写法(二)


原对象能够释放,但是引起新的问题,set自己的时候,造成的野指针

-(void)setCar:(Car*)car{
[
_car release];//先释放上一个对象

_car= [car retain];

3)set方法写法(三)解决上述问题:


判断新传递的对象是否是原来的对象,如果不是原来的对象则释放,然后再retain

-(void)setCar:(Car*)car{
//判断_car存放的是否是 形参对象,如果不是,则执行 [_car realease];

if(_car!=car) {

[_carrelease];//先释放上一个对象,(注意第一次是向nil发送release消息)

_car= [car retain];

}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值