NSString用copy和Strong修饰的区别

@property(nonatomic, strong)NSString *strongString;

NSMutableString*mString = [[NSMutableString alloc] initWithString:@"123"];

self.strongString = mString;

这个时候self.strongString的值是123,mString的值也是123

如果这个时候,我对mString进行另外的赋值为@“456”,那么self.strongString的值也会被置为@“456”,如果使用copy的话,可以防止self.strongString的值被修改,主要是mString->self.strongString,关系为A->B,强引用关系,如果对A进行修改,那个B也会跟着变,使用copy,主要是从A中拿出一份副本放到另一个空间,这个时候A,B直接没有啥引用关系,属于独立的空间,这样赋值就可以防止修改A,引起B的变化

这个问题主要是子类指向父类,多态问题引起的,当mString赋值给self.strongString时候,strongString就强引用了mString,指向的内存地址就是mString的内存地址,当mString进行修改的时候,自然self.strongString就跟着变了,如果想防止出现这个情况,可以使用copy

@property(nonatomic, copy)NSString *strongString;

或者在进行赋值的时候使用copy

self.strongString = [mString copy];

就可以避免这个情况了

你可能感兴趣的:(NSString用copy和Strong修饰的区别)