美文网首页
NSString什么时候使用copy,为什么

NSString什么时候使用copy,为什么

作者: 摩了个羯 | 来源:发表于2018-03-12 17:00 被阅读0次

    结论(一般情况下,这样做基本没问题)

    [如果你想让这个值是不变的那就用copy就行了,针对NSString来说]

    当修饰可变类型的属性时,如NSMutableArray、NSMutableDictionary、NSMutableString,用strong。
    当修饰不可变类型的属性时,如NSArray、NSDictionary、NSString,用copy。(你已经确定这个值是不可变的了)

    /*
    注意:以下NSMutableString值修改 的意思是 appendFormat 之类的操作
    */

    大白话(可能有问题,欢迎指正)

    str 表示 NSString mStr 表示 NSMutableString
    str1 表示被某个修饰的NSString

    str1 = Str
    //这个时候使用copy和使用strong效果一样
    str1 = mStr
    //这个时候如果你想让str1是“不可变字符串”,那么用copy
    //如果你想让str1是“可变字符串”(虽然它本来定义为NSString),那么你用strong

    一般NSString使用copy修饰,是为了保证安全,当给NSString赋值的是NSMutableString时,如果NSMutableString的值被人修改了后,使用被copy修饰的属性的值不变,而使用Strong修饰的属性的值会变化

    专业点的话就是(可能有问题,欢迎指正)

    当给NSString赋值的是NSMutableString时
    被strong修饰的属性 与 NSMutableString对象 指向的是同一个地址 所以当NSMutableString的值变化时,strong修饰的属性值也变、
    被copy修饰的属性 与 NSMutableString对象 使用的是 深拷贝 在赋值之前先把NSMutableString的值拷贝了 然后 给 被copy修饰的值 赋值 这时候当NSMutableString修改的时候,被copy修饰的属性值不变,还是原来的值,保证了他是不可变的

    最后

    当NSString属性的值,你想他是可变的时候,你可以用strong修饰,当然你也可以直接用NSMutableString属性,但注意不要用copy修饰NSMutableString

    [如果你想让这个值是不变的那就用copy就行了,针对NSString来说]

    文章参考http://blog.csdn.net/winzlee/article/details/51752354
    里面介绍了不要用copy修饰NSMutableString的原因(可能会崩溃)

    相关文章

      网友评论

          本文标题:NSString什么时候使用copy,为什么

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