我使用[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
我认为它应该相反,但......
答案 0 :(得分:7)
请帮自己一个忙,不要查看retainCount
尝试了解内存管理规则的工作原理。请参阅友好的Apple Memory Management Guide。
在您的示例中:
NSArray *anArray =[[NSArray alloc]init];
您已分配“anArray”(通过调用alloc
),因此您有责任致电release
。
anArray=[str componentsSeparatedByString:@","];
现在,你已经获得了一个新对象(正如seand所说,泄漏了原始对象)。这次,您不拥有该对象(因为componentsSeparatedByString
名称中没有alloc
或copy
),因此您不得发布该对象。
不要担心retainCount是什么;倾向于你自己编织和释放你应该而且不释放你不拥有的物体的物体。
答案 1 :(得分:5)
这一行...... anArray = [str componentsSeparatedByString:@“,”];
你压缩了'anArray'的原始分配(从而造成了泄漏)。 在现实生活中,你首先想要[anArray发布]。 这就是保留计数回到1的原因。
答案 2 :(得分:1)
文档指出保留计数不太可能提供任何有用的信息。 NOT 是了解保留和发布概念的好方法。