黑马程序员---OC学习笔记之集合对象的内存管理

——Java培训、Android培训、iOS培训、.Net培训——–

1、集合对象的内存管理

1)当一个对象加入到集合中,那么对该对象的【引用计数会+1】
2)当集合被销毁时,集合会向集合中的元素发送release消息
3)当集合销毁时,其中的对象不一定被销毁。如果其中的元素的引用计数不为1,那么即使发送了release消息 ,该对象也不会被销毁的。

2、集合对象的内存管理举例

【需要把项目从ARC模式切换到MRC模式】

//定义一个Person类用于测试,不需要成员变量
#pragma mark Person类声明部分
@interface Person : NSObject
@end
#pragma mark Person类实现部分
@implementation Person
//重写dealloc方法
- (void)dealloc
{
    NSLog(@"人挂了...");
    [super dealloc];
}
@end

1)把一个Person对象加入到NSArray中

 @autoreleasepool {
        //定义一个Person对象
        Person *p = [Person new];
        NSLog(@"p 计数器值:%ld",[p retainCount]);

        NSArray *arr = [NSArray arrayWithObject:p];
        NSLog(@"p 计数器值:%ld",[p retainCount]);
        [p release];
    }

【打印结果】
2015-10-09 08:23:05.487 集合对象的内存管理[596:303] p 计数器值:1
2015-10-09 08:23:05.489 集合对象的内存管理[596:303] p 计数器值:2
2015-10-09 08:23:05.489 集合对象的内存管理[596:303] 人挂了…
【分析结果】
1)对象p添加到NSArray后计数器+1,此时对象p的计数器值为2
2)对象p自己发送了一个release消息,此时计数器值为1,但是自动释放池销毁时,对象p没有加入到自动释放池,也被销毁了,说明数组arr在销毁时向【对象p发送了一次release消息】。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值