MRC内存管理(三)autorelease自动释放

续上一篇MRC内存管理(二)

- (void)dealloc{
    [_p1 release];
    [super dealloc];
}

- (void)viewDidLoad {
    [super viewDidLoad];
    //不是通过alloc/new/copy创建的对象,是autorelease的
    _p1 = [self createPeopleWithName:@"张三" andAge:23];
    //此时p1的引用计数虽然是1,但是代码结束之后就为0(不是稳定的,而凡是通过alloc,new,copy创建的对象,引用计数=1固定不变),p1如果是全局的需要继续使用则需要 [p1 retain];
    
        //通过非alloc/new/copy创建的对象,是autorelease的。
    UIButton *button = [UIButton buttonWithType:UIButtonTypeSystem];
    button.frame = CGRectMake(20, 30, 200, 40);
    button.backgroundColor = [UIColor greenColor];
    [self.view addSubview:button];
    [button addTarget:self action:@selector(buttonClick) forControlEvents:UIControlEventTouchUpInside];
}

- (void)buttonClick{
    NSLog(@"%@",_p1);
}

- (People *)createPeopleWithName:(NSString *)name andAge:(NSInteger)age{
    People *p = [[People alloc] init];
    p.name = name;
    p.age = age;
        //autorelease自动释放,延迟release,代码走完之前不会release,在一次事件循环(待命状态——>事件执行(响应到结束)——>事件执行完毕待命状态)之后release
        //[p release];如果release写在return上面,那么对象返回之前就会被释放。
        //autorelease自动释放(延迟release,在代码走完之前不会release,事件循环结束后release)
    [p autorelease];
    return p;
        //[p release];如果release写在return下面,代码不会被执行
}

    //description方法返回值为对象NSLog输出时的内容,默认为内存地址。
- (NSString *)description{
    return [NSString stringWithFormat:@"%@,%@,%lu",[super description],_name,(long)_age];
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值