在iphone中保留计数

时间:2010-11-23 07:43:35

标签: iphone objective-c count

我使用[anArray retainCount]来获取数组的保留计数..(我知道不应该使用它,但我只是用于学习保留概念)

以下是我的代码。


NSString *str = [[NSString alloc] initWithFormat:@"a,b,c,d"];
NSArray  *anArray =[[NSArray alloc]init];
NSLog(@"Retain count: %i", [anArray retainCount]);
anArray=[str componentsSeparatedByString:@","];
NSLog(@"Retain count: %i", [anArray retainCount]);  

输出

Retain count: 2
Retain count: 1

我认为它应该相反,但......

3 个答案:

答案 0 :(得分:7)

请帮自己一个忙,不要查看retainCount尝试了解内存管理规则的工作原理。请参阅友好的Apple Memory Management Guide

在您的示例中:

 NSArray  *anArray =[[NSArray alloc]init];

您已分配“anArray”(通过调用alloc),因此您有责任致电release

anArray=[str componentsSeparatedByString:@","];

现在,你已经获得了一个新对象(正如seand所说,泄漏了原始对象)。这次,您不拥有该对象(因为componentsSeparatedByString名称中没有alloccopy),因此您不得发布该对象。

不要担心retainCount是什么;倾向于你自己编织和释放你应该而且不释放你不拥有的物体的物体。

答案 1 :(得分:5)

这一行...... anArray = [str componentsSeparatedByString:@“,”];

你压缩了'anArray'的原始分配(从而造成了泄漏)。 在现实生活中,你首先想要[anArray发布]。 这就是保留计数回到1的原因。

答案 2 :(得分:1)

文档指出保留计数不太可能提供任何有用的信息。 NOT 是了解保留和发布概念的好方法。