Strong
Strong 修飾符表示指向并持有該對(duì)象,其修飾對(duì)象的引用計(jì)數(shù)會(huì)加1。該對(duì)象只要引用計(jì)數(shù)不為0就不會(huì)被銷毀。當(dāng)然可以通過將變量強(qiáng)制賦值 nil 來進(jìn)行銷毀。
Weak
weak 修飾符指向但是并不持有該對(duì)象,引用計(jì)數(shù)也不會(huì)加1。在 Runtime 中對(duì)該屬性進(jìn)行了相關(guān)操作,無需處理,可以自動(dòng)銷毀。weak用來修飾對(duì)象,多用于避免循環(huán)引用的地方。weak 不可以修飾基本數(shù)據(jù)類型。
assign
assign主要用于修飾基本數(shù)據(jù)類型, 例如NSInteger,CGFloat,存儲(chǔ)在棧中,內(nèi)存不用程序員管理。assign是可以修飾對(duì)象的,但是會(huì)出現(xiàn)問題。
copy
copy關(guān)鍵字和 strong類似,copy 多用于修飾有可變類型的不可變對(duì)象上 NSString,NSArray,NSDictionary上。
__unsafe_unretain
__unsafe_unretain 類似于 weak ,但是當(dāng)對(duì)象被釋放后,指針已然保存著之前的地址,被釋放后的地址變?yōu)?僵尸對(duì)象,訪問被釋放的地址就會(huì)出問題,所以說他是不安全的。
__autoreleasing
將對(duì)象賦值給附有 __autoreleasing修飾的變量等同于 ARC 無效時(shí)調(diào)用對(duì)象的 autorelease 方法,實(shí)質(zhì)就是扔進(jìn)了自動(dòng)釋放池。