NSString使用copy还是strong
2020-04-15 本文已影响0人
胡翔js
有一个字符串 @property (nonatomic, copy)NSString *str;
有一个 NSMutableString *sourceStr;
当进行了 str = sourceStr; 这个时候 sourceStr = @"change";,这时候str的值不会改变,因为来源是NSMutableString,所以是深拷贝,就是两个不同的字符串对象,如果 str不是copy,而是strong修饰的,那么属于浅拷贝,str,和sourceStr指向的是同一个地址,那么str值就会改变。浅拷贝拷贝的只是内容,没有拷贝内存地址。
copy是安全的,copy进行操作底层实现,str = sourceStr;
str = [sourceStr copy]
//
if ([str isMemnerOfClass:[NSMutableString class]])
底层会判断sourceStr是可变还是不可变,如果是不可变,就和strong没有什么区别,如果是可变,那就进行深拷贝, 用copy修饰时每次都会做if判断,用strong修饰不做任何判断。因此,用copy,一次判断可能不会影响性能,但项目十分庞大,还是会有影响的,所以当来源确定是不可变的时候就用strong修饰。
当来源为固定字符串就用strong,当为可变就用copy.