- (void)makeCopy
{
NSMutableString *string = [NSMutableString stringWithFormat:@"哈哈哈哈"];
NSString *str = [string copy];
[string appendString:@"你好"];
[string stringByAppendingString:@"yoyou"];
NSLog(@"%p,%p",str,string);
//內(nèi)存地址p>str:0x7fd3dae79c00
//p>string:0x7fd3dae78640
NSLog(@"%@,%@",str,string);
//str:哈哈哈哈
//strong:哈哈哈哈你好
//可見,是兩個不同的內(nèi)存地址,為什么呢?
//因為,對可變對象進行拷貝,是內(nèi)容拷貝
//對不可變對象,進行拷貝,是指針拷貝
//所以,NSString,NSArray,NSDictionary等對象進行拷貝的時候,使用copy無論給我傳入是一個可變對象還是不可變對象,我本身持有的就是一個不可變的副本.
//就像給model賦值,字符串類型都是copy,防止外部對象是可變的,要是修改了影響我自身的值。
//string變化了,但是str還是不變的。
//綜上,NSString 對象使用copy拷貝,保證數(shù)據(jù)不修改變化
}
- (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 修飾的變量,會根據(jù)拷貝的對象的類型不同進行修改
}