将自动与@property合成(复制)NSString *字符串是否自动复制?

时间:2015-05-14 09:04:38

标签: objective-c

假设我有一个带有ARC的属性并自动合成:

@interface A: NSObject
@property (nonatomic, copy) NSString *Name;
@end

现在使用此属性时,它会自动复制吗,还是我必须手动复制?

A *a = [A new];
NSString *str = @"hello";
a.name = str; // or a.name = [str copy]?

2 个答案:

答案 0 :(得分:1)

合成版本将包含一份副本。 (但NSString的实例没有真正的副本,因为它们是不可变的。)你不需要这样做。

以下评论中的Q:

- (void)setName:(NSString*)name
{
  _name = [name copy];
}

注意:您必须执行复制,即使参数被键入NSString *,因为可以将引用传递给可变子类NSMutableString的实例。

答案 1 :(得分:-2)

标记属性copy将适用于可变实例 基本上你不需要复制不可变实例(比如NSString)。