假设现在声明两个NSString对象,分别用copy和strong来修饰:
@property(nonatomic,copy)NSString *strOne;
@property(nonatomic,strong)NSString *strTwo;
NSMutableString *str = [NSMutableString stringWithFormat:@"str"];
self.strOne = str; self.strTwo=str;
NSLog(@"str==%p,strOne==%p,strTwo==%p",str,strOne,strTwo);
这里生成一个NSMutableString对象,并分别赋给strOne和strTwo,观察输出值:str==0x600000249e10,strOne=0x600000249e10,strTwo=0x60000023d1a0
可以看到str 和strOne地址相同,strTwo地址与其不同,说明在这里strTwo进行了深复制,strOne进行的是指针复制,也就是浅复制。
经过实践,如果将str由NSMutableString改成NSString的话,无论是copy还是strong 修饰之后输出都是同一个对象地址。
当修饰可变类型的属性时,如NSMutableArray、NSMutableDictionary、NSMutableString,用strong。
当修饰不可变类型的属性时,如NSArray、NSDictionary、NSString,用copy
网友评论