我有一个基本的内存管理问题如下:
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”吗?
答案 0 :(得分:1)
不,副本在返回之前不会自动释放副本(或者,换句话说,它会返回您拥有的对象)。复制属性如果有的话就会毫无价值,不是吗?
答案 1 :(得分:1)
在以下任何一种情况下,您都不需要释放someName
:复制成为一个独立的对象;它的创建不会增加原始的引用计数。
保留将按照您在帖子中描述的方式增加someName
的引用次数。