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
@implementation MyTestClass
@synthesize testString1, testString2, testString3;
-(id) init{
self.testString1 = @"";
[self setTestString2:@""];
testString3 = @"";
}
MyTestClass *obj = [[MyTestClass alloc] init];
最佳答案
由于在此示例中使用的是文字字符串,因此retainCount
并不重要(甚至不是增量),因为这些字符串对象实际上永远不会被取消分配。
但是,如果您要为每个属性分配运行时分配的字符串,则前两个将保留,而第三个则不会。由于您的属性被声明为“保留”,并且一个属性中使用了点语法,而另一个属性中则使用了“ setProperty”语法,因此将执行相同的设置器,并保留传递给该设置器的对象。第三个示例只是将属性的后备ivar设置为右侧的值,而不影响其所有权。
值得注意的是,retainCount
仅作为增量有用,不应将其视为一个明确的数字。绝对不要显式检查retainCount
的值,因为它的绝对值是不可预测的并且没有用。您似乎在您的问题中理解了这一点,但是每当与keepCount进行处理以确保所有相关人员都理解它时,有必要重述。
关于iphone - 需要对restCount进行澄清,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11344612/