NSString *str = [[NSString alloc] init];
NSLog(@"%ld",str.retainCount);
//打印值为-1.不知道什么原因
NSNumber *weight = [[NSNumber alloc] initWithInt:20];
NSLog(@"weight count = %ld",weight.retainCount);
//这个打印值为9223372036854775807,求指教,感激不尽
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
上面写着应该返回的是这个对象的UINT_MAX, 并且不会释放, 这个UINT_MAX
最大二进制为(11111111111111111111111111111111)也是十六进制(0xffffffff)
如果你当成有符号数取补码后输出就得-1;
如果你当成无符号数就是最大数即:4294967295
2.在X64的机器上输出是9223372036854775807,int的最大值 在I386的机器上输出是2.因为NSNumber的numberWithInteger产生的对象是属于autorelease pool
在帮助文档中
可以看到这么一句话:
The retainCount method does not account for any pending autorelease messages send to the receiver.
就是说retainCount 对于autorelease消息产生的的对象,并不可靠。
3.Do not use this method. (required) You should never use-retainCount, because it never tells you anything useful. 永远不要用这个方法,只要遵守alloc,neworcopy以及任何需要分配内存的时候调用release就可以了
参考文档:
http://www.friday.com/bbum/2011/12/18/retaincount-is-useless/