iOS- 非ARC的項目內存管理細節詳解(實戰)

1.前言  

接上文:iOS- 如何將非ARC的項目轉換成ARC項目(實戰)html

 

2.內存管理時相關的配置  

當咱們把將非ARC的內存管理都管理好後,發如今作有些操做的時候內存仍是在一直的緩慢增長 好比作一個最簡單的隨機數UITableView的顯示與滑動,進行內存管理後,不該該出現內存增長的,可是一直滑動內存就一直緩慢的往上增長的狀況。app

這時候咱們能夠檢查下看這裏的屬性是否打勾:post

或者檢測app一啓動時控制檯有沒有當即輸出下列這句話測試

 

若是勾上,上面三個選項,控制檯就會出現下列幾行輸出url

ARCTest(651,0x1f321a8) malloc: stack logs being written into /tmp/stack-logs.651.8af7000.ARCTest.jGqgoD.indexARCTest(651,0x1f321a8) malloc: recording malloc and VM allocation stacks to disk using standard recorderspa

 

若是發現有的話,把圖1的三個屬性的勾去掉。這三個選項只要用戶在不斷的操做,程序就會記錄下一些東西,這個時候就會耗費必定的內存。3d

3.內存管理方法  

3.1.在非ARC環境下,全部的類方法orm

在非ARC環境下,全部的類方法初始化htm

系統不會幫你管理內存。blog

並且你直接 release 也沒有效果

內存仍是會增長直至崩潰/
 
這樣釋放是錯誤的,沒有效果的,內存仍是會繼續增長:
 
     while (true) {      

	  NSMutableArray *arr = [NSMutableArray array];

      	  [arr release];

    }

 正確的類方法內存管理應該是:

    

 

正確內存走勢圖:

 

3.2.而若是是init 初始化的方法
 
   while (true) {

        NSString *re = [[NSString alloc] initWithFormat:@"ddd"];

        [re release];

    }
咱們直接手動release一次,便可將內存完成釋放正確。
這就是在非ARC裏類初始化和init初始化的內存管理上區別。
由於以前在網上看到有帖子說類初始化不須要用戶手動管理,因此本身作了個測試。在非ARC裏是行不通的。

 

 

做者: 清澈Saup
出處: http://www.cnblogs.com/qingche/
本文版權歸做者和博客園共有,歡迎轉載,但必須保留此段聲明,且在文章頁面明顯位置給出原文鏈接。  

相關文章
相關標籤/搜索