// 不可变对象==》不可变对象的copy 浅拷贝 地址不发生改变,相当于新的数组指向原来数组的地址,对任何一个进行release结果都一样
NSArray * array = [[NSArray alloc]initWithObjects:@"1", @"2", nil];
NSLog(@"array: %p %lu", array, array.retainCount);
NSArray * array1 = [array copy];
NSLog(@"array1: %p %lu", array1, array.retainCount);
// 不可变对象==》可变对象的copy 深拷贝 地址发生改变,相当于新创建了一个可变数组,需要对新的数组(对象)进行一次release
NSMutableArray * array2 = [array mutableCopy];
NSLog(@"array2: %p %lu", array2, array2.retainCount);
[array2 addObject:@"3"];
NSLog(@"%@", array2);
// 可变对象==》不可变对象copy 深拷贝 不论原来是可变对象还是不可变对象,copy后,就只会是不可变对象,地址发生改变,相当于新创建了一个不可变数组(对象),需要对新对象进行一次release
NSMutableArray *array3 = [[NSMutableArray alloc]initWithObjects:@"a", @"b", nil];
NSLog(@"array3: %p %lu", array3, array3.retainCount);
NSArray *array4 = [array3 copy];
NSLog(@"array4: %p %lu", array4, array4.retainCount);
// 可变对象==》可变对象copy 深拷贝 不论原来是可变对象还是不可变对象,mutablecopy后,就只会是可变对象,地址发生改变,相当于创建了一个新的可变数组(对象),需要对新的对象进行release
NSMutableArray *array5 = [array3 mutableCopy];
NSLog(@"array5: %p %lu", array5, array5.retainCount);
[array5 addObject:@"c"];
NSLog(@"%@", array5);
[array release];
[array1 release];
[array2 release];
[array3 release];
[array4 release];
[array5 release];