NSString 修饰词使用copy 还是 strong

2018-08-20  本文已影响0人  hg_said

假设现在声明两个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

上一篇 下一篇

猜你喜欢

热点阅读