0

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

Nsstring *a;
Nsstring *b;

a = [b retain];

a & b 的保留计数是多少。

a = [b copy];

a & b 的保留计数是多少。

提前致谢。

4

2 回答 2

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 的内存管理指南。此外,除非您有充分的理由不这样做,否则您应该使用ARC,它可以让您摆脱手动管理内存的大部分麻烦。


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

于 2011-10-17T17:16:54.583 回答
-3

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

[a retainCount]
于 2011-10-17T17:07:27.350 回答