2

可能重复:
NSString @property,使用复制而不是保留

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

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

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

但是如果“名称”设置为复制呢?虽然“someName”给“p.name”一个自己的副本,但副本仍然会自动释放,对吧?那么,我是否需要明确保留“someName”?

4

2 回答 2

1

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

于 2012-05-25T02:49:09.437 回答
1

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

someName保留将精确地增加您在帖子中描述的方式的引用计数。

于 2012-05-25T02:49:20.600 回答