美文网首页
NSString使用copy还是strong

NSString使用copy还是strong

作者: 胡翔js | 来源:发表于2020-04-15 17:30 被阅读0次

    有一个字符串 @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.

    相关文章

      网友评论

          本文标题:NSString使用copy还是strong

          本文链接:https://www.haomeiwen.com/subject/nmzcvhtx.html