在開發的過程中,只知道NSString類型最好用copy修飾而不能用strong,但是不知道為什么,今天了解了下,總算搞明白了。
如下所示,當修飾符為copy時,因為NSMutableString是NSString類型的子類,所以可以用指針self.name指向mStr,但是我們知道copy的含義是指當重新賦值時深拷貝新對象再賦值給self.name,
所以此時self.name的指針和mStr的指針指向的對象就不同了,所以當給mStr對象發送方法appendString的時候,修改的只是mStr(此時的值變為mutablestring----addstring),而self.name依然不變(mutablestring----);相反當修飾符為strong時,因為strong的意思是指針指向原對象,並且引用計數+1,所以self.name和mStr指向同一個對象,當修改mStr時self.name也會一起變化。所以為了避免NSString類型的值被修改,一般建議用copy修飾符修飾。
@interface ViewController () @property (nonatomic,copy) NSString *name; //@property (nonatomic,strong) NSString *name; @end
- (void)viewDidLoad { [super viewDidLoad]; NSMutableString *mStr = [NSMutableString stringWithFormat:@"mutablestring----"]; self.name = mStr; [mStr appendString:@"addstriing"];//name的修飾符為copy時,name的結果為mutablestring---- NSLog(@"%@",mStr);//name的修飾符為strong時,name的結果為mutablestring----addstriing NSLog(@"%@",self.name); }