2012-05-25 136 views
2

可能重复:
NSString @property, using copy instead of retain对于副本的NSString,我需要保留一份明确

我有如下基本的内存管理问题:

NSString *someName = [NSString stringWithFormat:@"Chris"]; 
Person *p = [[Person alloc] init]; 
p.name = someName; 

如果“名称”设置为“保留”,我知道“someName”将自动释放一次并保留一次,因此“p.name”将保留一个retainCount的NSString。

但是如果将“名称”设置为复制,那么该怎么办。虽然“someName”给自己的副本给“p.name”,但是副本是stil会自动释放,对吗?那么,我需要明确保留“someName”吗?

回答

1

不,拷贝在它返回之前不会自动释放拷贝(或者换句话说,它会返回一个你自己拥有的对象)。如果复制属性确实没有价值,那么它们就没有价值,不是吗?

1

无论在哪种情况下都不需要释放someName:副本成为独立对象;其创建不会增加原始的引用计数。

保留会增加参考计数someName,正如您在帖子中描述的方式。