2

可能重复:
NSString retainCount 是 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

我的TestClass.m

@implementation MyTestClass

@synthesize testString1, testString2, testString3;


-(id) init{

    self.testString1 = @"";

    [self setTestString2:@""];

    testString3 = @"";

}

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

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

我认为在执行此代码行后testString1testString2testString3 retainCounts将是1

我纠正了我的朋友吗?

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

对此的任何帮助表示赞赏。

谢谢

4

1 回答 1

2

由于您在此示例中使用文字字符串retainCount并不重要(甚至不作为增量),因为这些字符串对象实际上不会被释放。

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

值得注意的是,retainCount它只作为一个增量有用,不应该被认为是一个明确的数字。你永远不应该明确检查 的值retainCount,因为它的绝对值是不可预测的并且没有用。您似乎在您的问题中理解了这一点,但在处理 retainCount 时值得重申,以确保所有相关人员都理解它。

于 2012-07-05T12:53:49.287 回答