我想验证一些我总是使用的东西,但是当我考虑它时...我感到困惑为什么它以这种方式工作,我确定我阅读了有关它的解释,但无法找到它。 据我了解苹果创建他们的setter是这样的。更改属性对象不会影响属性
-(void)setString:(NSString *)value {
if (_string != value) {
[_string release];
_string = [value retain];
}
}
现在通常我会创建像这样的属性。
@property (nonatomic) NSString *string;
@synthesize string = _string;
的问题是关于下一个代码:
NSString *s = @"Should be deleted";
[self setString:s];
NSLog(@"string check111 =%@",self.string);
s = NULL;
NSLog(@"string check222=%@",self.string);
相同的输出将被生成。从setter中我可以看到我的属性指向了我更改的对象,但属性值将是相同的。这种情况触发另一个问题(如果它的工作原理为什么我需要复制属性)。 有人可以提供一个简短的解释吗? (或具体链接阅读)。 Tnx很多。 (我觉得我的问题可能已经要求在论坛)
您断言“应该删除字符串”首先是错误的。只需设置NULL的引用与它指向的对象的释放无关。 – erkanyildiz
你没事,如果我有机会,我会删除那个愚蠢的问题。 –