美文网首页
从NSString学习copy等关键字

从NSString学习copy等关键字

作者: _Homing_C | 来源:发表于2015-10-16 20:24 被阅读158次

    先从NSString的copy和strong分析


    这里引入对象的深复制,以及浅复制:前者是再开辟一个新的内存空间存储复制的对象,内容一样但是地址不一样;后者是复制对象的指针,所以地址是一样内容肯定也是一样。

    NSString的实例均可以使用copy、mutablecopy方法,但是NSMutableString只能使用mutablecopy方法。这里面的copy方法就是浅复制,而如果使用mutablecopy就是使用深复制。

    再说回使用copy等关键字定义一个NSString或者NSMutableString对象。一般情况下:
    1 nonatomic:对象非原子性,一般在线程安全的要求下使用保证线程安全。
    2 copy和retain:这里就好比上面说的深复制和浅复制。使用copy定义一个实例的时候,就是重新开辟一个内存空间存储。但是如果是retain就仅仅是复制实例的指针,因此如果不在arc下编程,可以查看到实例的retaincount会+1;除此之后

    @property (retain,nonatomic) NSString *rStr;  
    @property (copy, nonatomic)   NSString *cStr;
    - (void)test:
    {
    NSMutableString *mStr = [NSMutableStringstringWithFormat:@"abc"];
    self.rStr   = mStr;
    self.cStr     = mStr;
    [mStr appendString:@"de"];
    NSLog(@"retainStr:%@",  _rStr);
    NSLog(@"copyStr:%@",    _cStr);
    }
    

    结果:
    使用retain的字串rStr的值:@"abcde",
    而使用copy的字串cStr的值:@"abc",
    所以,如果一般情况下,我们都不希望字串的值跟着mStr变化,所以我们一般用copy来设置string的属性。
    如果希望字串的值跟着赋值的字串的值变化,可以使用strong,retain。

    3 copy和strong:在复制NSSring的情况下,copy和strong的情况是一样的。只有在复制NSMutableString的时候,strong跟retain差不多,就像是mrc下的retain,copy就是深复制。

    贴几个大神的实验代码:
    NSString特性分析学习
    知识点总结
    iOS5 ARC学习笔记

    Attention

    NSLog(@"test = %@, a_adr = %p,a_pointer",a,a,&a);
    

    哎_ c没学好,潜意识认识&a是a实例的地址,想想才发现是指向a的指针的地址!!!

    相关文章

      网友评论

          本文标题:从NSString学习copy等关键字

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