请写出程序执行后的打印结果:
@property (nonatomic, strong) NSString *aStrongString;
@property (nonatomic, copy) NSString *aCopyString;
代码1:
NSString *string = @"Hello";
self.aCopyString = string;
self.aStrongString = string;
mString = @"Hello World"
NSLog(@"aCopyString is :%@ \r\n aStrongString is :%@",self.aCopyString,self.aStrongString);
代码2:
NSMutableString *mString = [[NSMutableString alloc] initWithString:@"Hello"];
self.aCopyString = mString;
self.aStrongString = mString;
[mString appendFormat:@"\t%@",@"World"];
NSLog(@"%@,%@",self.aCopyString,self.aStrongString);
代码1打印结果:Hello, Hello,
代码1打印结果:Hello, Hello World
解析:
本题主要考察strong和copy属性修饰的区别以及深拷贝和浅拷贝:
1)当string是不可变对象时,copy是浅拷贝,会增加string的引用计数,只拷贝指针对象,指向string指向的地址,strong则是强引用string对象,增加string的引用计数,指向string指向的地址,当string的值发生改变时其指向的地址会发生改变,copy和strong修饰的对象指向的地址不会发生改变
2)当string是可变对象时,copy是深拷贝,此时只会拷贝string的值,拷贝出来的对象是不可变对象,指向新的地址,不增加string的引用计数,strong则是强引用string对象,增加string的引用计数,指向string指向的地址,当string的值发生改变,指向的地址不会发生改变,copy修饰的对象值不会发生改变,而strong修饰的对象值会发生改变