iOS內存管理(1) -- iOS中strong,copy,retain,weak,assign的用法

一、nonatomic關鍵字:
首先修飾屬性會要用到nonatomic(非原子的),相反的atomic(原子的),atomic是Objc使用的一種線程保護技術顧名思義就是在對該屬性進行修改的時候保護起來,基本上來講,是防止在寫未完成的時候被另外一個線程讀取,造成數據錯誤。而這種機制是耗費系統資源的,所以在iPhone這種小型設備上,如果沒有使用多線程間的通訊編程,那么nonatomic是一個非常好的選擇。

二、
1:weak的作用:在ARC環境下,所有指向這個對象的weak指針都將被置為nil。這個特性很有用,相信很多開發者都被指針指向已釋放的對象所造成的EXC_BAD_ACCESS困擾過,使用ARC以后,不論是strong還是weak類型的指針,都不會再指向一個已經銷毀的對象,從根本上解決了意外釋放導致的crash。retainCount不會加1。eg:修飾代理時會用到weak。
2:assign的作用:簡單賦值,不改變引用計數,對基礎數據類型 (例如NSInteger,CGFloat)和C數據類型(int, float, double, char, 等) 適用簡單數據類型
3:copy的作用:建立一個索引計數為1 的對象,然后釋放舊對象(一般在NSString 和 block中使用)
4:strong的作用:在ARC環境下,只要某一對象被一個strong指針指向,該對象就不會被銷毀。如果對象沒有被任何strong指針指向,那么就會被銷毀。在默認情況下,所有的實例變量和局部變量都是strong類型的。可以說strong類型的指針在行為上跟非ARC下得retain是比較相似的,被指向后retainCount就會加1。
5:retain的作用:在非ARC時代,你需要自己retain一個想要保持的對象,ARC環境下就不需要了。現在唯一要做的就是用一個指針指向這個對象,只要指針沒有被重置為空,對象就會一直在堆上。當指針指向新值的時候,原來的對象就會被release一次。這對實例變量,synthesize的變量或者是局部變量都是實用的。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容