美文网首页
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