NSString什么时候用copy,什么时候用strong
来源:互联网 发布:小米4能用移动4g网络吗 编辑:程序博客网 时间:2024/05/07 10:29
大部分的时候NSString的属性都是copy,那copy与strong的情况下到底有什么区别呢?
比如:
@property (retain,nonatomic) NSString *rStr;
@property (copy, nonatomic) NSString *cStr;
- (void)test:
{
NSMutableString *mStr = [NSMutableStringstringWithFormat:@"abc"];
self.rStr = mStr;
self.cStr = mStr;
NSLog(@"mStr:%p,%p", mStr,&mStr);
NSLog(@"retainStr:%p,%p", _rStr, &_rStr);
NSLog(@"copyStr:%p,%p", _cStr, &_cStr);
}
假如,mStr对象的地址为0x11,也就是0x11是@“abc”的首地址,mStr变量自身在内存中的地址为0x123;
当把mStr赋值给retain的rStr时,rStr对象的地址为0x11,rStr变量自身在内存中的地址为0x124;rStr与mStr指向同样的地址,他们指向的是同一个对象@“abc”,这个对象的地址为0x11,所以他们的值是一样的。
当把mStr赋值给copy的cStr时,cStr对象的地址为0x22,cStr变量自身在内存中的地址0x125;cStr与mStr指向的地址是不一样的,他们指向的是不同的对象,所以copy是深复制,一个新的对象,这个对象的地址为0x22,值为@“abc”。
如果现在改变mStr的值:
[mStr appendString:@"de"];
NSLog(@"retainStr:%@", _rStr);
NSLog(@"copyStr:%@", _cStr);
结果,
使用retain的字串rStr的值:@"abcde",
而使用copy的字串cStr的值:@"abc",
所以,如果一般情况下,我们都不希望字串的值跟着mStr变化,所以我们一般用copy来设置string的属性。
如果希望字串的值跟着赋值的字串的值变化,可以使用strong,retain。
注意:上面的情况是针对于当把NSMutableString赋值给NSString的时候,才会有不同,如果是赋值是NSString对象,那么使用copy还是strong,结果都是一样的,因为NSString对象根本就不能改变自身的值,他是不可变的。
把一个对象赋值给一个属性变量,当这个对象变化了,如果希望属性变量变化就使用strong属性,如果希望属性变量不跟着变化,就是用copy属性。
- NSString什么时候用copy,什么时候用strong
- NSString什么时候用copy,什么时候用strong
- NSString什么时候用copy,什么时候用strong
- NSString什么时候用copy,什么时候用strong
- NSString什么时候用copy,什么时候用strong
- NSString什么时候用copy,什么时候用strong
- NSString什么时候用copy,什么时候用strong
- NSString什么时候用copy,什么时候用strong
- NSString什么时候用copy,什么时候用strong
- NSString什么时候用copy,什么时候用strong
- NSString什么时候用copy,什么时候用strong
- NSString什么时候用copy,什么时候用strong
- NSString什么时候用copy,什么时候用strong
- NSString什么时候用copy,什么时候用strong
- NSString什么时候用copy,什么时候用strong
- NSString属性什么时候用copy,什么时候用strong?
- NSString属性什么时候用copy,什么时候用strong?
- NSString属性什么时候用copy,什么时候用strong?
- Duilib中Scrollbar的设置问题
- Linux进程通信之消息队列
- Java Web框架之一层模型-JSP实现
- Linux下网络流量实时监控工具 大全
- 最小二乘支持向量机(LSSVM)简述
- NSString什么时候用copy,什么时候用strong
- Jmeter http请求 Demo(压测Elasticsearch)
- 黑马程序员——java基础之IO流
- 修改 openstack 中 nova boot 创建实例只能在10个以内的限制
- 指针函数与函数指针的区别
- 什么是DSL
- linux下iptraf和netperf的应用
- 百度新接口,让网页秒收
- 4.17&4.18