繁体   English   中英

创建NSString后保留计数

[英]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

可以任何人回答这个为什么这里的日志打印这样的垃圾值

谢谢,

不要使用-retainCount。

对象的绝对保留计数是没有意义的。

您应该将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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM