环境:ARC
以代码演示为主
获取引用计数的方法:CFGetRetainCount((__bridge CFTypeRef)(obj))
- 创建一个对象 :
NSObject *obj1 = [NSObject new];
// obj1 的引用计数为:1
- 创建另一个强引用对象2,指向对象1
MyObject *obj2 = obj1;
// obj1 的引用计数为:2
// obj2 的引用计数为:2
- 创建另一个弱引用对象3,指向对象1
__weak MyObject *weakObj3 = obj1;
// obj1 的引用计数为:2
// obj2 的引用计数为:2
// weakObj3 的引用计数为:3
- 创建另一个强引用对象4,指向对象1
MyObject *obj4 = obj1;
// obj1 的引用计数为:3
// obj2 的引用计数为:3
// weakObj3 的引用计数为:4
// obj4 的引用计数为:3
- 创建另一个强引用对象5,指向弱引用指针对象3
MyObject *obj5 = obj3;
// obj1 的引用计数为:4
// obj2 的引用计数为:4
// weakObj3 的引用计数为:5
// obj4 的引用计数为:4
// obj5 的引用计数为:4
- 创建另一个弱引用对象6,指向强引用指针对象1
__weak MyObject *weakObj6 = obj1;
// obj1 的引用计数为:4
// obj2 的引用计数为:4
// weakObj3 的引用计数为:5
// obj4 的引用计数为:4
// obj5 的引用计数为:4
// weakObj6 的引用计数为:5
总结:
同一内存地址
- 强引用计数并不包括弱引用计数。
- 弱引用计数比强引用计数多 1(1个不为强引用认可的弱引用)
- 当强引用为0、也就是弱引用为1时,这些强弱指针所指向的内存地址会被释放。
- 弱引用不会影响内存地址的释放
网友评论