魚人學習小計(四)

內存管理:
因為手機硬件的內存及其有限,當一個程序占用內存過高時,系統會發出警告。為了更好的用戶體驗,ios引入了內存管理的概念。ios主要通過引用計數器實現對oc對象的內存管理,這種引用計數器通常只作用在oc對象上而非基本數據類型,因為數據類型對象一般存放在棧上,當代碼塊結束時,代碼塊所涉及的所有局部變量會彈棧清空,指向對象的指針也會被回收,而存放在堆上的oc對象雖然沒有指針指向,但仍存在與內存中,容易造成內存泄漏。
mrc:由開發人員手動retain和release操作引用計數。
arc:自動生成retain和release操作代碼,判斷原則為 沒有強指針指向的對象則會被自動釋放。
block中的內存管理,詳見http://www.lxweimin.com/p/ba825ef44d60
autoreleasepool自動釋放池
mrc下,調用autorelease方法會將對象放入自動釋放池內,當自動釋放池釋放時,會對池內所有變量做一次release操作。每個runloop都會自動產生一個自動釋放池,當現runloop休眠或者迭代結束的時候,main 釋放池會自動釋放,當runloop喚醒或初始化時,會自動產生一個新釋放池。釋放池是棧序排列的,新創建的池會放在棧頂,優先釋放。當遇到頻繁創建臨時對象時可考慮用自動釋放池避免內存泄漏。

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

推薦閱讀更多精彩內容

  • 內存管理 簡述OC中內存管理機制。與retain配對使用的方法是dealloc還是release,為什么?需要與a...
    丶逐漸閱讀 1,989評論 1 16
  • iOS內存管理 概述 什么是內存管理 應用程序內存管理是在程序運行時分配內存(比如創建一個對象,會增加內存占用)與...
    蚊香醬閱讀 5,749評論 8 119
  • 11.看下面的程序,第一個NSLog會輸出什么?這時str的retainCount是多少?第二個和第三個呢? 為什...
    AlanGe閱讀 746評論 1 4
  • *面試心聲:其實這些題本人都沒怎么背,但是在上海 兩周半 面了大約10家 收到差不多3個offer,總結起來就是把...
    Dove_iOS閱讀 27,200評論 30 471
  • 1,NSObject中description屬性的意義,它可以重寫嗎?答案:每當 NSLog(@"")函數中出現 ...
    eightzg閱讀 4,179評論 2 19