NSString 爲何要使用copy,而不是retain

NSString 爲何要使用copy,而不是retain
一、首先若是使用retain,只是引用計數+1,並無生成新的對象,因此效率好
二、可是使用copy安全。由於NSString 爲 NSMutableString 的基類,若是將NSMutableString 以retain的形式賦值給NSString後,後續修改NSMutableString會致使NSString內容的變化,這一般不是咱們但願的,因此NSString要使用copy。好比:

NSMutableString *mName = [NSMutableString stringWithString:@"wang"]; 
Person *p = [[[Person alloc] init] autorelease]; 
p.name = mName; 
[mName setString:@"chen"]; 
NSLog(@"p.name:%@", p.name);  安全



咱們把mName的值 「wang」 賦給了p.name,而若是p裏面的name使用的是retain,那麼只是將mName的引用計數+1,這時候p.name的值是 」wang「
緊接着咱們在下面把mName的值設置爲「chen」,結果你再打印p.name,這時候它的值也會變成chen,這是咱們不想見到的。
使用copy就不會有這個問題。

對象

相關文章
相關標籤/搜索