MRC:
retain:適用繼承于NSObject類的對象類型丸卷。釋放舊的對象茎活,將舊對象的值賦予輸入對象犀被,再提高輸入對象的引用計數(shù)為1。
assign:適用基礎(chǔ)數(shù)據(jù)類型 (NSInteger寡壮,CGFloat)和C數(shù)據(jù)類型(int, float, double, char, 等等)。簡單賦值讹弯,不更改對象的引用計數(shù)况既。
ARC:
strong(強引用):等同于retain,但在block聲明時和retainyou 區(qū)別组民。
weak(弱引用):適用代理的聲明棒仍。
copy(深拷貝、淺拷貝):適用NSString類型和block類型臭胜。
atomic和nonatomic:
atomic是Objc使用的一種線程保護技術(shù)降狠,基本上來講,是防止在寫未完成的時候被另外一個線程讀取庇楞,造成數(shù)據(jù)錯誤榜配。而這種機制是耗費系統(tǒng)資源的,所以在iPhone這種小型設(shè)備上吕晌,如果沒有使用多線程間的通訊編程蛋褥,那么nonatomic是一個非常好的選擇。
retain和strong的區(qū)別:
在聲明block時睛驳,strong相當于copy烙心,retain相當于assign。
assign和strong的區(qū)別:
在聲明block時乏沸,strong相當于copy淫茵,retain相當于assign。
assign和weak的區(qū)別:
在ARC中,在有可能出現(xiàn)循環(huán)引用的時候,往往要通過讓其中一端使用weak來解決蹬跃;自身已經(jīng)對它進行一次強引用,沒有必要再強引用一次,此時也會使用weak匙瘪。
assign 可以用非OC對象,而weak必須用于OC對象。
weak 此特質(zhì)表明該屬性定義了一種“非擁有關(guān)系” (nonowning relationship)蝶缀。為這種屬性設(shè)置新值時丹喻,設(shè)置方法既不保留新值,也不釋放舊值翁都。此特質(zhì)同assign類似碍论,然而在屬性所指的對象遭到摧毀時,屬性值也會清空(nil out)柄慰。
而 assign 的“設(shè)置方法”只會執(zhí)行針對“純量類型”(scalar type鳍悠,例如 CGFloat 或 NSlnteger 等)的簡單賦值操作税娜。
strong強引用和weak弱引用的區(qū)別:
(weak和strong)不同的是 當一個對象不再有strong類型的指針指向它的時候 它會被釋放? ,即使還有weak型指針指向它藏研。
一旦最后一個strong型指針離去 巧涧,這個對象將被釋放,所有剩余的weak型指針都將被清除遥倦。
深拷貝和淺拷貝:
用@property聲明 NSString谤绳、NSArray、NSDictionary 經(jīng)常使用copy關(guān)鍵字袒哥,是因為他們有對應(yīng)的可變類型:NSMutableString缩筛、NSMutableArray、NSMutableDictionary堡称,他們之間可能進行賦值操作瞎抛,為確保對象中的字符串值不會無意間變動,應(yīng)該在設(shè)置新屬性值時拷貝一份却紧。