copy与strong修饰的对象赋值区别

2016-07-09  本文已影响191人  温暖的弦Y

- (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 修饰的变量,会根据拷贝的对象的类型不同进行修改

}

上一篇下一篇

猜你喜欢

热点阅读