美文网首页
iOS-copy strong 可变 不可变 深浅拷贝

iOS-copy strong 可变 不可变 深浅拷贝

作者: 我是谁重要吗 | 来源:发表于2018-07-04 23:43 被阅读14次

    NSString内存分配情况

    可变 不可变:

    NSString 不可变是说它指向的不可变,重新赋值NSString 是重新指向了新的地址,之前指向的地址内容不发生改变。

    NSMutableString *strM1 = [[NSMutableString alloc] initWithString:@"123"];
    NSMutableString *strM2 = [[NSMutableString alloc] initWithString:@"123"];
    NSLog(@"strM1地址:%p",strM1); //strM1地址:0x60000024f750
    NSLog(@"strM2地址:%p",strM2); //strM2地址:0x60000024fbd0
    NSLog(@"%d %d %d",strM1 == strM2,[strM1 isEqual:strM2],[strM1 isEqualToString:strM2]); //0 1 1
    [strM1 appendString:@"456"];
    NSLog(@"strM1地址:%p",strM1); //strM1地址:0x60000024f750
    
    

    strM1 改变了值,但指向的地址没有改变 。因为strM1是可变的NSMutableString

    深浅拷贝:

    • 浅拷贝:指针拷贝,不产生新对象
    • 深拷贝:内容拷贝,产生新对象

    NSString中

    • 浅拷贝:未产生新对象
    • 深拷贝:产生新对象

    NSSMutableString中

    • 浅拷贝:产生新对象
    • 深拷贝:产生新对象

    以下原理相同
    NSArray;
    NSMutableArray;
    NS;
    NSMutable
    ;

    copy 、mutableCopy

    copy 、mutableCopy和深浅拷贝没有直接对应关系

    copy,strong

    copy,strong和深浅拷贝没有完全对应关系
    简单来说,希望不跟着源头改变,就用copy,跟着改变就用strong

    参考:
    https://www.zybuluo.com/MicroCai/note/50592
    NSString与NSMutableString的深浅拷贝
    NSString什么时候用copy,什么时候用strong
    https://www.jianshu.com/p/6419828ae238
    https://www.jianshu.com/p/b7de4031838a

    相关文章

      网友评论

          本文标题:iOS-copy strong 可变 不可变 深浅拷贝

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