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

posted @ 2017-07-19 16:27  o.0...w  阅读(151)  评论(0编辑  收藏  举报