美文网首页
OC 引用计数探究

OC 引用计数探究

作者: 三三哥 | 来源:发表于2016-10-26 14:21 被阅读0次

直接拿xcode 实践对比打印出来retaincount 来看看引用计数到底怎样增加和减少的

首先在Xcode里面setting设置打开ARC ,并且设置为NO,打开方式直接搜索automatic 即可

我们知道 oc 的内存管理的黄金法则就是 凡是alloc copy retain MutableCopy 等等修饰的变量都会引用导致引用计数+1,直接贴代码

打印结果是

简单说明:我们alloc 数组arr1时 ,arr1引用计数为1  然后[arr1 retain]一次 此时引用计数为2

接着 直接用一个新的指针arr2 指向arr1的内存,此时我们可以看作两个指针其实是指向同一片内存,那么打印出的arr1 的引用计数 和arr2 的引用计数是一样的(我个人这样理解,可能理解不到位,欢迎批评指正)。此时对arr2 进行retain操作,引用计数 +1 ,打印出来看到 arr1 和arr2 都为3 ,证明确实arr1 和arr2 指针指向的都是一样的内存对象。这个内存对象的引用计数经过arr1 和arr2 各retain 一次 ,所以变成3.

随后我又用arr3 重新申请一片内存,并初始化赋值arr1,此时 打印arr3 的retaincount ,我们可以看到是1 ,那么可以推测其实arr3指针指向的 新的独立的一块内存空间,引用计数和arr1无关,arr1的内存空间 也没有新的指针指向它,所以arr1和arr2 都是保持3 不变。

接着对arr3 retain 操作,arr3 引用计数变为2,arr1 和arr2 不变。

上面是针对可变容器内对象。

不可变容器内对象我也尝试打印了一下发现如下结果:

不可变对象用[[NSArray alloc]init] 初始化之后变成这鬼东西18446744073709551615。

我还没弄明白怎么回事,求知道的大神指点,

后来我把不可变数组换成 [[NSArray alloc]initWithArray:@[@"1"]]]  这样的初始化时候  一切打印结果和可变的一模一样。

相关文章

  • OC 引用计数探究

    直接拿xcode 实践对比打印出来retaincount 来看看引用计数到底怎样增加和减少的 首先在Xcode里面...

  • 内存管理-MRC与ARC

    引用计数 在iOS中,使用引用计数来管理OC对象的内存1、一个新创建的OC对象引用计数默认是1,当引用计数减为0,...

  • 【iOS-内存管理】

    在iOS使用引用计数来管理OC对象的内存 一个新创建的OC对象的引用计数是1,当引用计数减为0,OC对象就会销毁,...

  • 内存管理

    OC对象的内存管理 在iOS中,使用引用计数来管理OC对象的内存 一个新创建的OC对象引用计数默认是1,当引用计数...

  • 内存管理:OC对象的内存管理MRC

    在iOS中,使用引用计数来管理OC对象的内存 一个新创建的OC对象引用计数默认是1,当引用计数减为0,OC对象就会...

  • 内存管理MRC

    在iOS中,使用引用计数来管理OC对象的内存一个新创建的OC对象引用计数默认是1,当引用计数减为0,OC对象就会销...

  • OC类对象的内存管理、AutoreleasePoolPage

    内存管理: 在iOS中,使用引用计数来管理OC对象的内存 一个新创建的OC对象引用计数默认是1,当引用计数减为0,...

  • 内存管理

    OC对象的内存管理 1、在iOS中,使用引用计数来管理OC对象的内存,一个新创建的OC对象引用计数默认是1,当引用...

  • 底层26:内存管理

    在iOS中,使用引用技术来管理OC对象的内存一个新创建的OC对象引用计数默认为是1,当引用计数减为0,OC对象就会...

  • Swift内存管理

    和OC一样,Swift中也是通过引用计数的方式来管理对象的内存的。在Swift类 结构探究[https://www...

网友评论

      本文标题:OC 引用计数探究

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