假设我有一个带有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]?
答案 0 :(得分:1)
合成版本将包含一份副本。 (但NSString
的实例没有真正的副本,因为它们是不可变的。)你不需要这样做。
以下评论中的Q:
- (void)setName:(NSString*)name
{
_name = [name copy];
}
注意:您必须执行复制,即使参数被键入NSString *
,因为可以将引用传递给可变子类NSMutableString
的实例。
答案 1 :(得分:-2)
标记属性copy
将适用于可变实例
基本上你不需要复制不可变实例(比如NSString)。