//
// @proprety数组字典字符串用copy和strong区别(深浅拷贝).h
// IOS笔记
//
//
/* _proprety________copy_strong_________h */
/*
定义属性时NSArray,NSString,NSDictionary为何要用copy
定义一个Person类,并定义一下属性,并设置strong(深拷贝)
@interface Person : NSObject
@property (nonatomic, strong) NSString *name;
@property (nonatomic, strong) NSArray *array;
@property (nonatomic, strong) NSDictionary *dict;
@end
在main函数中添加下面代码
NSMutableString *str = [[NSMutableString alloc] initWithString:@"aa"];
Person *p1 = [[Person alloc] init];
p1.name = str;
[str appendString:@"bb"];
NSLog(@"\n%@\n%@", str, p1.name);
NSLog(@"\n%p\n%p", str, p1.name);
运行后得到以下结果:
2015-09-15 17:32:32.259 DeepCopy[3876:1395529]
aabb
aabb
2015-09-15 17:32:32.259 DeepCopy[3876:1395529]
0x1003037c0
0x1003037c0
根据结果可以看出来两个字符串的地址是一样的,并且只要修改了一个,另一个的值也会变。
下面将Person类中的strong改为copy,然后再次运行结果(浅拷贝)
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSArray *array;
@property (nonatomic, copy) NSDictionary *dict;
运行结果:
2015-09-15 17:34:14.917 DeepCopy[3895:1401270]
aabb
aa
2015-09-15 17:34:14.918 DeepCopy[3895:1401270]
0x10020a690
0x616125
此时两个字符串的地址不一样了,说明在给p1.name赋值的时候系统又创建了一块空间保存p1.name,这样两个字符串可以各自修改各自,互不影响了。其他两种类型也是同样的道理。一下是其他两个类型测试代码*/