#import <Foundation/Foundation.h>
/* 1.复制对象的基本概念 复制对象顾名思义,复制一个对象作为副本,它会开辟一块新的内存(堆内存)来存储副本对象,就像复制文件一样。即源对象和副本对象是两块不同的内存区域。 */ int main(int argc, const char * argv[]) { @autoreleasepool { /*__________________________对数组进行retain_____________________________*/ /* NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"one",@"two", nil]; //retain只是引用计数+1,没有创建新的对象 //array1与array2指针相同,指向同一个对象 NSMutableArray *array2 = [array1 retain]; if (array1 == array2) { NSLog(@"array1 == array2"); NSLog(@"array1的引用计数:%ld",array1.retainCount); } */ /*__________________________对数组进行copy_____________________________*/ /* NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"one",@"two", nil]; [array1 retain]; //引用计数:2 //复制对象,创建一个新的副本对象 NSArray *array2 = [array1 copy]; //array2计数为:1,因为是新创建出来的对象 if (array1 != array2) { NSLog(@"array1 != array2,是两个对象"); NSLog(@"array1的引用计数:%ld",array1.retainCount); NSLog(@"array2的引用计数:%ld",array2.retainCount); } [array2 release]; [array1 release]; */ /*__________________________copy与mutableCopy的区别_____________________________*/ /* copy与 mutableCopy都是复制对象,都能复制一个新的副本对象出来 copy复制出来的对象,是不可变的对象 mutableCopy复制出来的对象,是可变的对象 */ NSMutableArray *array1 = [NSMutableArray arrayWithObjects:@"one",@"two", nil]; //copy复制出来的对象是不可变的 NSArray *array2 = [array1 copy]; //mutableCopy 复制出来的对象是可变 NSMutableArray *array3 = [array1 mutableCopy]; [array3 addObject:@"three"]; NSLog(@"array3=%@",array3); //NSNumber *number = @123; //NSNumber没有实现NSMutableCopying协议 //[number mutableCopy]; //错误 } return 0; }
|