如何找到保留计数?

时间:2011-10-17 17:05:20

标签: objective-c retaincount

请解释下面的代码行,我只是困惑..,

Nsstring *a;
Nsstring *b;

a = [b retain];

&的保留计数是多少?湾

a = [b copy];

&的保留计数是多少?湾

提前致谢。

2 个答案:

答案 0 :(得分:3)

从技术上讲,您发布的情况中的保留计数是不确定的,因为您从不初始化变量。在未初始化的指针上调用retain可能会崩溃。

其次,您的情况中的保留计数取决于您如何初始化变量。

NSString *a;
NSString *b = @"test";

a = [b retain];

/* Both variables reference the same object which has been retained.
   Retain count +1 
 */

NSString *a;
NSString *b = @"test 2";

a = [b copy];

/* `a` has a retain count +1 (a variable returned from a `copy`
   method has a retain count +1). `b` retain count does not change 
   (you haven't called `retain` on `b`, so it's count remains the
   same.
 */

如果您还没有这样做,请阅读Apple's memory management guidelines。此外,除非你有充分的理由不这样做,否则你应该使用ARC,这可以解除大部分令人头疼的问题,无法手动管理内存。


在对另一个答案的评论中,您询问如何确定对象的保留计数。你总是自己跟踪它。其他对象可能会保留和释放您的字符串,但您不在乎。如果使用alloc创建和对象,在对象上调用retain或在对象上调用copy,则在完成对象时,您负责释放或自动释放该对象。否则,这不是你的责任。对象的绝对保留计数永远不重要。

答案 1 :(得分:-3)

NSString没有有意义的保留计数。但是,如果您使用的是一般示例,那么查找具有正常保留计数的对象的保留计数的方法是:

[a retainCount]