int main(int argc, const char * argv[]) { @autoreleasepool { //------------------不可变的对象------------------- //建立一个字符串型a NSString *a = @"abcdefg"; //浅拷贝a,只是引用了一下,打印出来地址是同样的 //这里若是把浅拷贝出来的a1的值改变了,源a是不会跟着变的,a1会自动生成一个新的对象,和a是不一样的地址 NSString *a1 = [a copy]; //深拷贝a,直接克隆了一下,打印出来是不一样的地址 NSString *a2 = [a mutableCopy]; //打印a,a1,a2的值,比较一下 NSLog(@"%@ %@ %@", a, a1, a2); //打印a,a1,a2的地址,比较一下 NSLog(@"%p %p %p", a, a1, a2); //------------------可变的对象--------------------- NSMutableString *b = [NSMutableString stringWithString:@"abcdefg"]; //对可变对象不管是浅拷贝仍是深拷贝,都是直接克隆了对象出来,都是不一样的地址 NSMutableString *b1 = [b copy]; NSMutableString *b2 = [b mutableCopy]; NSLog(@"%@ %@ %@", b, b1, b2); NSLog(@"%p %p %p", b, b1, b2); } return 0; }
对一不可变对象复制,copy是指针复制(浅拷贝)和mutableCopy就是对象复制(深拷贝)。spa
若是是对可变对象复制,都是深拷贝,可是copy返回的对象是不可变的。指针
能够使用copy的类:code
NSNumber,对象
NSString,字符串
NSMutableString,string
NSDictionary,it
NSMutableDictionary,io
NSArray,table
NSMutableArray,class
NSSet,
NSMutableSet