iOS相关知识(九)string使用copy还是使用strong来修饰

用 copy 修饰的 NSString 如果在无意中被一个 NSMutableString 类型的变量赋值,原先的 NSString 会被 copy 一份用来存储 NSMutableString 的值,万一 NSMutableString 的值被修改,不会影响到 NSString 的值,这能体现 NSString 作为不可变类型的性质。

用 strong 修饰的 NSString 如果在无意中被一个 NSMutableString 类型的变量赋值, NSString 不会被拷贝,一旦 NSMutableString 的值被修改,NSString 的值也就发生了改变,这与 NSString 作为不可变类型相违背。
当然如果 NSString 被一个 NSString 赋值,copy 的效果与 strong 的效果是一样的,直接改了就是。
以上的结论同样适用于 NSArray 和 NSDictionary。

举例:https://www.jianshu.com/p/33f175d97b86

浅拷贝只是对指针的拷贝,拷贝后两个指针指向同一个内存空间,深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针。
copy方法:如果是非可扩展类对象,则是浅拷贝。如果是可扩展类对象,则是深拷贝。
mutableCopy方法:无论是可扩展类对象还是不可扩展类对象,都是深拷贝

你可能感兴趣的:(iOS相关知识(九)string使用copy还是使用strong来修饰)