iOS之NSString類型為什么要用copy修飾


在開發的過程中,只知道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);
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM