对于复制NSString,我是否需要显式保留副本

时间:2012-05-25 02:44:21

标签: iphone objective-c memory-management

  

可能重复:
  NSString @property, using copy instead of retain

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

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

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

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

2 个答案:

答案 0 :(得分:1)

不,副本在返回之前不会自动释放副本(或者,换句话说,它会返回您拥有的对象)。复制属性如果有的话就会毫无价值,不是吗?

答案 1 :(得分:1)

在以下任何一种情况下,您都不需要释放someName:复制成为一个独立的对象;它的创建不会增加原始的引用计数。

保留将按照您在帖子中描述的方式增加someName的引用次数。