美文网首页
NSString And copy

NSString And copy

作者: fordG | 来源:发表于2018-09-29 09:40 被阅读0次
        @property (nonatomic, strong) NSString *str;
    
    • 用strong修饰的情况代码
        #define address(obj) NSLog(@"%p", obj);
        #define value(obj) NSLog(@"%@", obj);
    
        NSMutableString *a = [NSMutableString stringWithFormat: @"a"];
        address(a)
        value(a)
        self.str = a;
        address(self.str)
        value(self.str)
        
        [a setString: @"b"];
        address(a)
        value(a)
        address(self.str)
        value(self.str)
    

    输出

    2018-09-29 09:26:51.018373+0800 test[91062:2018209] 0x60400005b360
    2018-09-29 09:26:51.020217+0800 test[91062:2018209] a
    2018-09-29 09:26:51.021226+0800 test[91062:2018209] 0x60400005b360
    2018-09-29 09:26:51.021406+0800 test[91062:2018209] a
    2018-09-29 09:26:51.025936+0800 test[91062:2018209] 0x60400005b360
    2018-09-29 09:26:51.026168+0800 test[91062:2018209] b
    2018-09-29 09:26:51.026379+0800 test[91062:2018209] 0x60400005b360
    2018-09-29 09:26:51.026491+0800 test[91062:2018209] b
    

    result:

    strong修饰强拥有,内存一直没有改变,但是赋值的可变字符串a的值发生来改变会影响到str

    • 用copy修饰的情况代码
    @property (nonatomic, copy) NSString *str;
    

    输出

    2018-09-29 09:34:54.342395+0800 test[91141:2029573] 0x60400004a1d0
    2018-09-29 09:34:54.342760+0800 test[91141:2029573] a
    2018-09-29 09:34:54.343057+0800 test[91141:2029573] 0xa000000000000611
    2018-09-29 09:34:54.343323+0800 test[91141:2029573] a
    2018-09-29 09:34:54.344926+0800 test[91141:2029573] 0x60400004a1d0
    2018-09-29 09:34:54.345984+0800 test[91141:2029573] b
    2018-09-29 09:34:54.346662+0800 test[91141:2029573] 0xa000000000000611
    2018-09-29 09:34:54.347832+0800 test[91141:2029573] a
    

    result:

    copy修饰的情况下, 如果赋值的字符串是个不可变的字符串, 不会有问题,如果是可变字符串,就会对可变字符串进行一次,深拷贝, 在赋值给str,所以a的操作在str被赋值之后,不会影响str

    NSString 用copy还是strong可以根据实际需求进行选择。

    相关文章

      网友评论

          本文标题:NSString And copy

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