copy/strong/weak/assign的區(qū)別

f703738da9773912bede4ac9f9198618377ae29a.jpg
## copy
copy用來修飾對象,而且能使用copy這個屬性的修飾的對象,必須遵守了NSCopying協(xié)議,并實(shí)現(xiàn)了- (id)copyWithZone:(nullable NSZone *)zone方法,默認(rèn)NSString/NSArray/NSDictionary還有他們對應(yīng)可變的類型,都實(shí)現(xiàn)了這個方法,所以我們可以直接使用點(diǎn)屬性來copy或者mutablecopy,這也是為什么其他的對象(如UIView和它的子類等)我們用copy屬性修飾就會崩潰,還會提示我們([UIImageView copyWithZone:]: unrecognized selector sent to instance 0x7ff690c1c7c0)
對于不可變的對象copy 是地址的復(fù)制/mutablecopy是內(nèi)容的拷貝,會產(chǎn)生一個新的對象!

NSString *string1 = [NSString stringWithFormat:@"好好的"];
NSString *string2 = string1.copy;
NSLog(@"%p-----%p",string1,string2);
// 0x7f829ad27880-----0x7f829ad27880 地址一樣
NSString *string3 = string1.mutableCopy;
NSLog(@"%p",string3);
// 0x7f8798717bf0

strong和weak

1.strong用來修飾對象,表示強(qiáng)引用,修飾的對象引用計(jì)數(shù)+1
2.weak同樣用來修飾對象,表示弱引用,修飾的對象引用計(jì)數(shù)不變,
只有當(dāng)一個對象不再有strong類型的指針指向它的時候,不管有多少個weak指針指向它,它都會被釋放,并且會把所有weak修飾的屬性置nil,weak主要是用來解決循環(huán)引用導(dǎo)致的雙方都釋放不了的問題

assign

assign用來修飾基本數(shù)據(jù)類型(NSInteger,CGFloat)和C數(shù)據(jù)類型(int, float, double, char, 等等)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容