oc引用计数为-1的情况
来源:互联网 发布:geo数据库教程 编辑:程序博客网 时间:2024/05/29 14:14
以前以为引用计数最小就是1,再小对象就被销毁了,今天练习过程中发现打印出来-1的情况,特此记录,结果可能根据sdk版本不一样,毕竟我的结果就跟视频教程是不一样的,人家的就不是-1,是一创建就是2。贴下代码
NSArray* array1 = [NSArrayarrayWithObjects:nil];
NSLog(@"array1.retaincount = %ld",array1.retainCount);//打印-1
NSArray* array2 = [[NSArrayalloc] init];
NSLog(@"array2.retaincount = %ld",array2.retainCount);//打印-1
NSArray* array3 = [NSArrayarray];
NSLog(@"array3.retaincount = %ld",array3.retainCount);//打印-1
NSArray* array4 = [NSArrayarrayWithObjects:@"hello",nil];
NSLog(@"array4.retaincount = %ld",array4.retainCount);//打印-1
NSString* str1 = [NSStringstringWithString:@"str1"];
NSLog(@"str1.retaincount = %ld", str1.retainCount);//打印-1
NSString* str2 =@"str2";
NSLog(@"str2.retaincount = %ld", str2.retainCount);//打印-1
NSString* str3 = [NSStringstringWithFormat:@"str3"];
NSLog(@"str3.retainCount = %ld", str3.retainCount);//打印-1
NSString* str4 = [NSStringstringWithFormat:@"str%d",4];
NSLog(@"str4.retainCount = %ld", str4.retainCount);//打印-1
NSMutableString* mStr1 = [NSMutableStringstring];
NSLog(@"mStr1.retainCount = %ld", mStr1.retainCount);//打印1
NSMutableString* mStr2 = [NSMutableStringstringWithString:@"mStr2"];
NSLog(@"mStr2.retainCount = %ld", mStr2.retainCount);//打印1
NSString* str5 = mStr2.copy ;
NSLog(@"str5.retainCount = %ld", str5.retainCount);//打印-1
NSMutableArray* mArray1 = [NSMutableArrayarray];
NSLog(@"mArray1.retainCount = %ld",mArray1.retainCount);//打印1
结果:
2016-11-03 16:59:15.625762 04 task4[5675:495680] array1.retaincount = -1
2016-11-03 16:59:15.625789 04 task4[5675:495680] array2.retaincount = -1
2016-11-03 16:59:15.625810 04 task4[5675:495680] array3.retaincount = -1
2016-11-03 16:59:15.625845 04 task4[5675:495680] array4.retaincount = 1
2016-11-03 16:59:15.625876 04 task4[5675:495680] str1.retaincount = -1
2016-11-03 16:59:15.625894 04 task4[5675:495680] str2.retaincount = -1
2016-11-03 16:59:15.625976 04 task4[5675:495680] str3.retainCount = -1
2016-11-03 16:59:15.626042 04 task4[5675:495680] str4.retainCount = -1
2016-11-03 16:59:15.626100 04 task4[5675:495680] mStr1.retainCount = 1
2016-11-03 16:59:15.626130 04 task4[5675:495680] mStr2.retainCount = 1
2016-11-03 16:59:15.626157 04 task4[5675:495680] str5.retainCount = -1
2016-11-03 16:59:15.626197 04 task4[5675:495680] mArray1.retainCount = 1
看起来在创建不可变数组为空时,引用计数为-1;
不可变数组不为空时,引用计数为预想的1;
创建不可变字符串时,引用计数为-1,哪怕是拷贝来的,哪怕拷贝源对象计数为1;
创建可变字符串时引用计数为预想的1;
这估计是系统做的优化,当然不是很要紧,不过确实很让人困惑,不知道用意何在,影响到像我这样的初学者。
- oc引用计数为-1的情况
- OC的内存管理 与 引用计数
- OC使用引用计数的内存管理
- OC的内存管理引用计数机制
- OC自动引用计数
- OC-引用计数
- OC-023.OC在手动内存管理的引用计数
- OC视频笔记-引用计数和对象所有权的基本概念
- OC-058.copy和MutableCopy 复制的引用计数
- OC 第四讲 内存管理机制,引用计数
- 面试题 OC引用计数内存管理
- OC 内存管理 --- 引用计数简单使用
- OC内存管理之—引用计数
- 关于OC中引用计数问题
- OC阅读笔记十一:引用计数
- OC 内存引用计数 内存管理机制
- 非generic phy的引用计数为0
- 关于OC中NSString类型的 retainCount为-1的情况
- 62 & 63. Unique Paths I & II
- ubuntu如何在线安装java7?
- 特殊符号 UNICODE编码
- 用http-server在移动设备上查看网页效果
- 必须要注意的 C++ 动态内存资源管理(四)——智能指针进阶
- oc引用计数为-1的情况
- 《利用Python进行数据分析》第二章pivot_table报错问题
- Bash基础
- vpn
- Nginx 上传不了,只能上传1M内文件
- Ubuntu下Nexus开机启动
- javascript 获取URL参数(一)
- MySQL InnoDB体系架构之内存
- View框架之draw()流程