NSString 修饰词使用copy 还是 strong

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容