為啥NSString通常用copy?什么時候用strong?
父類指針可以指向子類對象(多態(tài))
因為在使用NSString的時候,一般如果初始化后不想改變這個NSString的值屯伞,應(yīng)該將其類型設(shè)為copy,如果用strong類型疾棵,比如NSString用NSMutableString賦值,指向其地址灸芳,當(dāng)NSMutableString的值被改變時,這個NSString值也發(fā)生了變化拜姿,如果是copy修飾的NSString對象,在用NSMutableString給他賦值時,會進(jìn)行深拷貝,即把其內(nèi)容也給拷貝了一份,兩者指向不同的位置,即使改變了NSMutableString的值,NSString的值也不會改變.集合對象的內(nèi)容復(fù)制僅限于當(dāng)前集合的對象本身烙样,對象元素仍然是指針復(fù)制
蘋果文檔說明
NSArray *deepCopyArray=[[NSArray alloc] initWithArray:someArray copyItems:YES];
對一個不可變數(shù)組進(jìn)行深拷貝對于數(shù)組包含數(shù)組 集合對象的內(nèi)容復(fù)制僅限于當(dāng)前集合的對象本身,對象元素仍然是指針復(fù)制這種情況你想深拷貝,需要這樣做
NSArray* trueDeepCopyArray = [NSKeyedUnarchiver unarchiveObjectWithData:
[NSKeyedArchiver archivedDataWithRootObject:oldArray]];