MRC内存管理(二)数组、控件

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

- (void)viewDidLoad {
    [super viewDidLoad];
    NSObject *obj = [[NSObject alloc] init];
    
    NSLog(@"对象--%lu",(unsigned long)obj.retainCount);
    
        //当把对象放入数组中时,数组会对这个对象引用计数+1.
    NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:obj, nil];
    NSLog(@"加入数组对象--%lu",(unsigned long)obj.retainCount);
    
        //把对象从数组中移除时,对象的引用计数-1.
    [array removeObject:obj];
    NSLog(@"移除数组对象--%lu",(unsigned long)obj.retainCount);
        //当数组本身被释放前,会对自己内部所有的对象release一次。
    
    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(20, 40, 200, 40)];
    label.text = @"123";
    NSLog(@"控件对象--%lu",(unsigned long)label.retainCount);
    
        //当把视图添加到父视图时,父视图会对这个视图retain一次。
    [self.view addSubview:label];
    NSLog(@"加入父视图--%lu",(unsigned long)label.retainCount);
    
        //当视图从父视图移除时,引用计数-1
        //[label removeFromSuperview];
    
        //当视图释放前,会对自身所有的子视图release一次
    [label release];
}

- (IBAction)showAlertClick:(UIButton *)sender {
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"标题" message:@"消息" delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
    NSLog(@"alert--%lu",(unsigned long)alert.retainCount);
        //show会导致alert的引用计数增加。
    [alert show];
    NSLog(@"show--%lu",(unsigned long)alert.retainCount);
    [alert release];
}

- (IBAction)presentViewController:(UIButton *)sender {
    SecondVC *vc = [[SecondVC alloc] init];
    NSLog(@"创建VC--%lu",(unsigned long)vc.retainCount);
        //presentViewController模态弹出
        //模态弹出会导致vc引用计数增加
    [self presentViewController:vc animated:YES completion:nil];
    NSLog(@"模态弹出--%lu",(unsigned long)vc.retainCount);
    [vc release];
}
输出结果如下:

至于一个模态弹出为何输出引用计数这么大,博主也甚是不解,望广大友人给予帮忙解释一下,感激不尽,谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值