NSString copy,strong 修饰问题
2017-07-1
#import "ViewController.h" @interface ViewController () @property (nonatomic, strong) NSString *str1; @property (nonatomic, copy) NSString *str2; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. @autoreleasepool { NSMutableString *str = [NSMutableString stringWithString:@"hello"]; self.str1 = str; self.str2 = str; [str appendString:@" world"]; NSLog(@"str1:%@ str2:%@", self.str1, self.str2); // str1:hello world str2:hello } }
2017-07-19 16:13:23.526 多线程[54069:31793118] str1:hello world str2:hello
当一个可变字符串,赋值给一个strong修饰的,不可变字符串,,随后对可变字符串修改,不可变字符串会跟随着改变,
当一个可变字符串,赋值给一个copy修饰的,不可变字符串,随后对可变字符串修改,不可变字符串不会随之改变,
原因:copy修饰, 当可变字符串赋值时,会进行copy操作,是一个新的对象, 是一个新的指针, 并不指向这个可变字符.所有copy修饰的不可变字符,不会随着可变字符的修改后进行改变
9 16:13:23.526 多线程[54069:31793118] str1:hello world str2:hello