- (void)makeCopy
{
NSMutableString *string = [NSMutableString stringWithFormat:@"哈哈哈哈"];
NSString *str = [string copy];
[string appendString:@"你好"];
[string stringByAppendingString:@"yoyou"];
NSLog(@"%p,%p",str,string);
//内存地址p>str:0x7fd3dae79c00
//p>string:0x7fd3dae78640
NSLog(@"%@,%@",str,string);
//str:哈哈哈哈
//strong:哈哈哈哈你好
//可见,是两个不同的内存地址,为什么呢?
//因为,对可变对象进行拷贝,是内容拷贝
//对不可变对象,进行拷贝,是指针拷贝
//所以,NSString,NSArray,NSDictionary等对象进行拷贝的时候,使用copy无论给我传入是一个可变对象还是不可变对象,我本身持有的就是一个不可变的副本.
//就像给model赋值,字符串类型都是copy,防止外部对象是可变的,要是修改了影响我自身的值。
//string变化了,但是str还是不变的。
//综上,NSString 对象使用copy拷贝,保证数据不修改变化
}
- (void)mutablecopy
{
NSMutableArray *mutableArray = [[NSMutableArray alloc] init];
NSArray *array = @[ @1, @2, @3, @4 ];
self.array = mutableArray;
[mutableArray removeAllObjects];;
NSLog(@"%@",self.array);
//()<__NSArrayM 0x7ff9d8f03370>(
// )
[mutableArray addObjectsFromArray:array];
self.array = [mutableArray copy];
[mutableArray removeAllObjects];;
NSLog(@"%@",self.array);//(__NSArrayI *) $0 = 0x00007ff9d8f21560 @"4 elements"
//(
// 1,
// 2,
// 3,
// 4
// )
//mutableArray先后的变化,影响了self.array的值
//综上,strong 修饰的变量,会根据拷贝的对象的类型不同进行修改
}
网友评论