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就不會有這個問題。
對象