為什么NSString使用copy而不是strong, 很多人都有說深復(fù)制淺復(fù)制,影子克隆人等說法,這里我講一下我的理解,直接上代碼
屬性:
@property(nonatomic,strong)NSString *StrongStr;
@property(nonatomic,copy)NSString *CopyStr;
實(shí)現(xiàn):
NSMutableString *str=[NSMutableString stringWithString:@"1234"];
self.StrongStr=@"Sunshine";
self.CopyStr=@"Sunshine";
self.StrongStr=str;
self.CopyStr=str;
NSRange range=NSMakeRange(0,1);
[str replaceCharactersInRange:range withString:@"2"]
區(qū)別:
結(jié)論:可以看到在一個(gè)copy修飾和一個(gè)strong修飾的string,在復(fù)制給了一個(gè)他們的子類(mutableString)之后, 當(dāng)可變字符串str改變之后, 使用strong修飾的隨之改變, 而copy修飾的并未發(fā)生改變.
也就是說, 使用strong,只是把指針指向了可變字符串str, 并且計(jì)數(shù)器+1 , 所以當(dāng)可變字符串改變時(shí),本身也隨著改變. 而使用copy 則可以復(fù)制一個(gè)值存起來, 可以防止對(duì)象在自己不知道的情況下被改變欣硼。