copy strong属性用法
定义理解
浅Copy:
指针的复制,指向同一块内存。
深Copy:
内存的复制,指向不同的内存,互不干涉。
代码说明
//定义
@property(nonatomic,strong) NSString *s_strong;
@property(nonatomic,copy) NSString *s_copy;
//定义为可变字符串
NSMutableString *mStr = [NSMutableString stringWithString:@"mStr"];
self.s_strong = mStr;
self.s_copy = mStr;
NSLog(@" ms:%@--address:%p",mStr, mStr);
NSLog(@"s_strong:%@--address:%p",_s_strong, _s_strong);
NSLog(@" s_copy:%@--address:%p",_s_copy, _s_copy);
- 输出
- ms: mStr ——address: 0x60000025a3d0
- s_strong: mStr ——address: 0x60000025a3d0
- s_copy:mStr ——–address:0xa0000007274536d4 内存地址发生改变
- 总结:使用可变类型,如:NSMutableString赋值,copy深拷贝,复制了一份内容,并创建了新地址;strong浅拷贝,指向同一个地址。
- 可变 ==> strong浅拷贝 ;copy深拷贝。
//串追加字符串后
[mStr appendString:@"+add"];
NSLog(@" ms:%@--address:%p",mStr, mStr);
NSLog(@"s_strong:%@--address:%p",_s_strong, _s_strong);
NSLog(@" s_copy:%@--address:%p",_s_copy, _s_copy);
- 输出
- ms:mStr+add —-address:0x60000025a3d0
- s_strong:mStr+add —–address:0x60000025a3d0
- s_copy:mStr —–address:0xa0000007274536d4 //内容不变,地址发生变化
- 总结:copy深拷贝:指向了不同的地址,内容同样不发生变化; strong浅拷贝:指向了相同的地址。
//定义为不可变字符串
NSString *str = @"str";
self.s_strong = str;
self.s_copy = str;
NSLog(@" str:%@--address:%p",str, str);
NSLog(@"s_strong:%@--address:%p",_s_strong, _s_strong);
NSLog(@" s_copy:%@--address:%p",_s_copy, _s_copy);
- 输出
- str:str ——address:0x1047f3548
- s_strong:str—–address:0x1047f3548
- s_copy:str——-address:0x1047f3548
- 总结:定义为不可变 string等属性, copy与strong指向的内容及地址不发生变化;copy,strong均为浅拷贝。
- 不可变 ==> strong==copy 浅拷贝