在iphone中保留计数

在iphone中保留计数,iphone,objective-c,count,Iphone,Objective C,Count,我已使用[anArray retainCount]获取数组的保留计数..(我知道这不应该使用,但我使用它只是为了学习保留概念) 下面是我的代码 输出 Retain count: 2 Retain count: 1 我认为应该是相反的,但是……文档说明保留计数不太可能提供任何有用的信息。这不是了解保留和发布概念的好方法。文档说明保留计数不太可能提供任何有用的信息。这不是学习保留和发布概念的好方法。这一行。。。 anArray=[str componentsSeparatedByString:

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

下面是我的代码



输出

Retain count: 2
Retain count: 1

我认为应该是相反的,但是……

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

文档说明保留计数不太可能提供任何有用的信息。这不是学习保留和发布概念的好方法。

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

您压扁了“anArray”的原始赋值(从而造成泄漏)。 在现实生活中,你可能会想先[anArray release]。 这就是为什么保留计数返回到1。

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

您压扁了“anArray”的原始赋值(从而造成泄漏)。 在现实生活中,你可能会想先[anArray release]。
这就是为什么保留计数返回到1。

请帮自己一个忙,不要查看
retainCount
试图了解内存管理规则是如何工作的。而是指友好的苹果

在您的示例中:

 NSArray  *anArray =[[NSArray alloc]init];
您已经分配了“anArray”(通过调用
alloc
),因此您负责调用
release

anArray=[str componentsSeparatedByString:@","];
现在,您获得了一个新对象(正如seand所说,泄漏了原始对象)。这一次,您不拥有该对象(因为
componentsSeparatedByString
在其名称中没有
alloc
copy
),因此您不能释放它


不要担心什么是重新计数;倾向于编织和释放你应该拥有的对象,不要释放你不拥有的对象。

请帮自己一个忙,不要查看
retainCount
试图了解内存管理规则是如何工作的。而是指友好的苹果

在您的示例中:

 NSArray  *anArray =[[NSArray alloc]init];
您已经分配了“anArray”(通过调用
alloc
),因此您负责调用
release

anArray=[str componentsSeparatedByString:@","];
现在,您获得了一个新对象(正如seand所说,泄漏了原始对象)。这一次,您不拥有该对象(因为
componentsSeparatedByString
在其名称中没有
alloc
copy
),因此您不能释放它


不要担心什么是重新计数;倾向于你自己编织和释放你应该和不应该释放你不拥有的对象。

可能值得一读。抱歉,但当我使用此代码时,它同时显示保留计数1。这是正确的,因为arrayAs只需要释放数组对象,所以orig retain计数为2是任何人的猜测。(但正如一些人提到的,你不应该依赖价值)。可能是NSArray将自己添加到自动释放池?请查看该方法的文档。TL;医生:不要用它。可能值得一读。抱歉,但当我使用此代码时,它同时显示保留计数1。这是正确的,因为arrayAs只需要释放数组对象,所以orig retain计数为2是任何人的猜测。(但正如一些人提到的,你不应该依赖价值)。可能是NSArray将自己添加到自动释放池?请查看该方法的文档。TL;DR:不要使用它。+1用于从对象所有权的角度讨论它,而不是使用过时的“保留计数”术语。你是说下面的代码是正确的?NSString*str=[[NSString alloc]initWithFormat:@“a,b,c,d”];NSArray*anArray=[[NSArray alloc]init];[阵列释放];anArray=[str componentsSeparatedByString:@“,”]//现在不发布anArray+1如果您提到
new
也会给您一个您拥有的对象,并且我被允许进行两次投票,那么它将是+2。@在线是的,尽管您还需要发布
str
+1来讨论对象所有权,而不是使用过时的“保留计数”你是说下面的代码正确吗?NSString*str=[[NSString alloc]initWithFormat:@“a,b,c,d”];NSArray*anArray=[[NSArray alloc]init];[阵列释放];anArray=[str componentsSeparatedByString:@“,”]//现在不发布anArray+1如果你提到
new
也会给你一个你拥有的对象,那么它将是+2,并且我被允许向上投票两次。@在线是的,尽管你也需要发布
str
。如果你想要答案,问一个问题。'我认为应该是相反的,但是……“这是一个模糊的暗示……如果你想要答案,问一个问题。”我认为应该是相反的,但是…“是一个模糊的含义。。。