@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];
就可以避免这个情况了