strong 表示指向并擁有該對象。其修飾的對象引用計數(shù)會增加1。該對象只要引用計數(shù)不為 0 則不會被銷毀。當(dāng)然強(qiáng)行將其設(shè)為 nil 可以銷毀它。
weak 表示指向但不擁有該對象。其修飾的對象引用計數(shù)不會增加。無需手動設(shè)置,該對象會自行在內(nèi)存中銷毀。
assign 主要用于修飾基本數(shù)據(jù)類型,如 NSInteger 和 CGFloat,這些數(shù)值主要存在于棧上。
weak 一般用來修飾對象,assign 一般用來修飾基本數(shù)據(jù)類型。原因是assign 修飾的對象被釋放后,指針的地址依然存在,造成野指針,在堆上容易造成崩潰。而棧上的內(nèi)存系統(tǒng)會自動處理,不會造成野指針。
copy 與 strong 類似。不同之處是 strong 的復(fù)制是多個指針指向同一個地址,而 copy 的復(fù)制每次會在內(nèi)存中拷貝一份對象,指針指向不同地址。copy 一般用在修飾有可變對應(yīng)類型的不可變對象上,如 NSString , NSArray , NSDictionary 。
Objective-C 中,基本數(shù)據(jù)類型的默認(rèn)關(guān)鍵字是 atomic , readwrite , assign ;普通屬性的默認(rèn)關(guān)鍵字是 atomic , readwrite , strong 。
更多:iOS面試題合集