object-c set方法的内存管理

 内存管理代码规范:

 1.只要调用了alloc,必须有releaseautorelease

 

 2.set方法的代码规范:

 1>基本数据类型:直接赋值

 - (void)setAge:(int)age

 {

    _age = age;

 }

 

 2>OC对象类型

 - (void)setCar:(Car *)car

 {

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

    if (car != _car) 

    {

        // 2.对旧对象做release

        [_car release];

 

        // 3.对新对象做retain

        _car = [car retain];

    }

 }

 

 3.dealloc方法的代码规范

 1>一定要用[super dealloc],且必须放在最后

 2>self(当前)所拥有的其他对象做release

 - (void)dealloc

 {

    [_car release];

    [super dealloc];

 }


代码示例:

main.m

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Car.h"

int main(int argc, const char * argv[])
{
    Person *p = [[Person alloc] init];
    p.age = 20;
    
    Car *c1 = [[Car alloc] init];
    c1.speed = 250;
    
    //p买了c1这辆车
    p.car = c1;
    
    Car *c2 = [[Car alloc] init];
    c2.speed = 300;
    
    //p换了一辆新车c2
    p.car = c2;
    
    [c2 release];
    
    [c1 release];
    
    [p release];

    return 0;
}

Person.m

#import "Person.h"

@implementation Person
- (void)setCar:(Car *)car
{
    if (car != _car) {
        //对正在使用的旧车release
        [_car release];
        
        //对新车retain
        _car = [car retain];
    }
}

- (Car *)car
{
    return _car;
}

- (void)setAge:(int)age
{
    _age = age;
}

- (int)age
{
    return _age;
}

- (void)dealloc
{
    //当人不在了,代表不用车了
    //对车release
    [_car release];
    
    NSLog(@"%d岁的Person对象被回收了", self.age);
    [super dealloc];
}

@end

Car.m

#import "Car.h"

@implementation Car
- (void)setSpeed:(int)speed
{
    _speed = speed;
}

- (int)speed
{
    return _speed;
}

- (void)dealloc
{
    /*
     _speed:直接访问成员变量
     self.speed:get方法
     self->_speed:直接访问成员变量
     [self speed]:get方法
     */
    NSLog(@"速度为%d的Car对象被回收了", self.speed);
    
    [super dealloc];
}

@end


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值