[英]Retain count after creating NSString
我正在通过以下方法创建一个NSString类型的对象
NSString *str = [[NSString alloc] initWithString:@"aaaaaaaaaaaaaaa"];
NSLog(@"retain count == %d",[str retainCount]);
之后我只打印保留计数值
2010-10-29 17:04:03.939示例[1580:207]保留计数== 2147483647
可以任何人回答这个为什么这里的日志打印这样的垃圾值
谢谢,
对象的绝对保留计数是没有意义的。
您应该将release
的次数与导致保留对象的次数完全相同。 不会少(除非你喜欢泄漏),当然,没有更多(除非你喜欢崩溃)。
有关完整详细信息,请参阅内存管理指南
在这种特定情况下,您通过调用alloc
导致一个retain
,因此,您需要在代码中的某个地方,任何地方调用release
(或autorelease
)。
您正在从字符串文字创建不可变的NSString对象。 字符串文字是在编译时创建的,并在程序的整个运行时间内生效 - 因此无法取消分配,保留/释放对它没有影响。 为了优化(因为你的NSString无论如何都是不可变的) -initWithString:
方法只能返回传递给它的字符串,以便字符串文字地址分配给你的str变量。
如果您将初始化代码更改为-initWithFormat:
那么我认为您将获得预期的保留计数值
常量和文字有保留count = INT_MAX,它们不能被释放,因为它们是单独分配的,不在堆上与其他对象分配(afaik)
您的值为UINT_MAX = 0x7FFFFFFF
您可以在类中重写此方法以实现您自己的引用计数方案。 对于永不释放的对象(即,它们的释放方法不执行任何操作),此方法应返回UINT_MAX,如limits.h中所定义。
它是静态字符串,然后对象不能被dealloc。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.