Possible Duplicate:
NSString retainCount is 2147483647




假设我有一个名为MyTestClass.h的类。

有三个NSString变量,它们的初始化方式不同

类结构看起来像

@interface MyTestClass : NSObject {

  NSString *testString1;
  NSString *testString2;
  NSString *testString3;

}

@property (nonatomic, retain) NSString *testString1;
@property (nonatomic, retain) NSString *testString2;
@property (nonatomic, retain) NSString *testString3;

@end


MyTestClass.m

@implementation MyTestClass

@synthesize testString1, testString2, testString3;


-(id) init{

    self.testString1 = @"";

    [self setTestString2:@""];

    testString3 = @"";

}


现在我打算创建一个MyTestClass对象

MyTestClass *obj = [[MyTestClass alloc] init];


我认为在此代码行执行后,testString1,testString2和testString3 keepCounts将为1。

我正确的朋友吗?

我可以知道如果我释放testString3会发生什么吗?

在这方面的任何帮助表示赞赏。

谢谢

最佳答案

由于在此示例中使用的是文字字符串,因此retainCount并不重要(甚至不是增量),因为这些字符串对象实际上永远不会被取消分配。

但是,如果您要为每个属性分配运行时分配的字符串,则前两个将保留,而第三个则不会。由于您的属性被声明为“保留”,并且一个属性中使用了点语法,而另一个属性中则使用了“ setProperty”语法,因此将执行相同的设置器,并保留传递给该设置器的对象。第三个示例只是将属性的后备ivar设置为右侧的值,而不影响其所有权。

值得注意的是,retainCount仅作为增量有用,不应将其视为一个明确的数字。绝对不要显式检查retainCount的值,因为它的绝对值是不可预测的并且没有用。您似乎在您的问题中理解了这一点,但是每当与keepCount进行处理以确保所有相关人员都理解它时,有必要重述。

关于iphone - 需要对restCount进行澄清,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11344612/

10-10 12:25