美文网首页
从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等关键字

    先从NSString的copy和strong分析 这里引入对象的深复制,以及浅复制:前者是再开辟一个新的内存空间存...

  • iOS Copy 关键字

    如何使用copy关键字在定义NSString,NSArray等不可变类型,经常使用了copy关键字,这是因为他们存...

  • 怎么用copy关键字

    1. NSString、NSArray、NSDictionary 等经常使用 copy 关键字; 因为父类指针可以...

  • copy的使用

    一 :NSString、NSArray、NSDictionary等经常使用copy关键字:1 原因:父类指针可以指...

  • copy、assign、strong、weak、__block、

    1、copy: 1️⃣NSString、NSArray、NSDictionary 等等经常使用copy关键字,是因...

  • Copy

    概述 用@property声明 NSString、NSArray、NSDictionary 经常使用copy关键字...

  • 面试题

    1、@property声明的NSString(或NSArray,NSDictionary)经常使用copy关键字,...

  • Object-c中的copy关键字

    Object-c中的copy关键字 copy只会产生不可变的副本对象(比如NSString) mutableCop...

  • copy & strong

    用@property声明的NSString(或NSArray,NSDictionary)经常使用copy关键字,为...

  • NSString、NSArray、NSDictionary为什么

    @property声明的NSString(或NSArray,NSDictionary)经常使用copy关键字,为什...

网友评论

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

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