美文网首页
iOS 引用计数

iOS 引用计数

作者: ___________枫林晚 | 来源:发表于2021-11-09 20:40 被阅读0次

    什么是引用计数

    引用计数是一个简单而有效的管理对象生命周期的方式

    原理

    当我们创建一个新对象时,它的引用计数为1,当有一个新的指针指向这个对象时,引用计数+1,当指针不在指向这个对象时,我们将其引用计数-1,当对象的引用计数变为0时,说明这个对象不再被任何指针指向了,这个时候我们就可以将这个对象销毁,回收内存。

    为什么需要引用计数

    引用计数真正派上用场的场景是在面向对象的程序设计架构中,用于对象直接传递和共享数据。

    不要向已经释放的对象发送消息

    例:

    NSObject *obj = [[NSObject alloc] init];
    NSLog(@"Reference count = %u", [obj retainCount]);
    [obj release];
    NSLog(@"Reference count = %u", [obj retainCount]);
    

    可能结果
    Reference count = 1
    Reference count = 1

    我们注意到最后的打印结果不为0,为什么?

    这是因为该对象的内存已经被回收,而我们向一个已经被回收的对象发送retainCount消息,所以它的结果是不确定的,如果该对象所占内存被复用,则可能出现程序崩溃。

    那么为什么这个被回收的对象引用值为1而不是0?

    因为最后一次执行Release操作的时候,系统知道马上要回收内存了,没必要再将retainCount减1了,因为不管减不减1,该对象肯定都会被回收,而对象被回收后,它的所有内存区域,包括retainCount值也变得没有意义,不将retainCount减1变成0,减少了内存操作,加速对象的释放。

    相关文章

      网友评论

          本文标题:iOS 引用计数

          本文链接:https://www.haomeiwen.com/subject/fhhvzltx.html