setter和getter内存处理

Person.m

#import "Person.h"

@implementation Person
//析构函数
- (void)dealloc {//调用 任何之前不能写在[super dealloc];因为它已经把所有的都销毁的
    NSLog(@"Person dealloced.");
    //释放所有当前对象所持有的对象成员变量
    [_name release];
    [_score release];
    [super dealloc];
}
//构造函数
- (id)initWithName:(NSString *)name score:(NSArray *)score{
    self = [super init];
    if (self) {
        _name = name;
        _score = score;
    }
    return self;
}

- (void)setName:(NSString *)name{
    //释放旧的对象release,持有新的对象retain
    //为了避免相同对象赋值之后造成的对象以外释放,需要判断对象是否相同
    if (_name != name) {
        [_name release];
        _name = [name retain];
    }
    /*
     [name retain];
     [_name release];
     _name = name;
     */
    
   
}
-(NSString *)name{
    return _name;
}
- (void)setScore:(NSArray *)score{
    if (_score != score) {
        [_score release];
        _score = [score retain];
    }

}
- (NSArray *)score{
    return _score;
}
@end

main.m

  /*Cocoa内存管理规则*/
        /*
         5个
         堆:需要的时候分配内存,不需要的时候手动释放,编译器不负责释放该区域的内存空间
         栈:需要的时候分配内存,不需要的时候自动释放,编译器负责释放该区域的内存空间
         全局/静态存储区 :存储全局变量和静态变量
         常量存储区:存储常量,不可变的数据
         自由存储区:
         */
        //1.使用alloc ,new,copy,mutableCopy生成的对象,对象出事引用计数值为1,需要手动释放内存(堆上的对象);
        //2.非以上四个方法生成的对象(便利初始化)对象初始化引用计数值为1,并且设置为自动释放的,无需手动释放(栈上的对象);
        //3.使用retain持有的对象,需要保证retain和 release次数相等
    
        /*setter和getter内存处理*/
        Person *person = [[Person alloc]init];
        
        NSArray *score = [[NSArray alloc]initWithObjects:@"3", nil];
        
        NSLog(@"score =%lu",[score retainCount]);
        [person setScore:score];
        NSLog(@"score =%lu",[score retainCount]);
        [score release];//如果不release内存泄露
        NSLog(@"score = %lu",[score retainCount]);


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值