@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,關(guān)系為A->B,強引用關(guān)系,如果對A進行修改乾忱,那個B也會跟著變限匣,使用copy抖苦,主要是從A中拿出一份副本放到另一個空間,這個時候A,B直接沒有啥引用關(guān)系米死,屬于獨立的空間锌历,這樣賦值就可以防止修改A,引起B(yǎng)的變化
這個問題主要是子類指向父類峦筒,多態(tài)問題引起的究西,當mString賦值給self.strongString時候,strongString就強引用了mString勘天,指向的內(nèi)存地址就是mString的內(nèi)存地址怔揩,當mString進行修改的時候,自然self.strongString就跟著變了脯丝,如果想防止出現(xiàn)這個情況商膊,可以使用copy
@property(nonatomic, copy)NSString *strongString;
或者在進行賦值的時候使用copy
self.strongString = [mString copy];
就可以避免這個情況了