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