国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

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

2019-11-14 20:00:46
字體:
來源:轉載
供稿:網友

1.前言  

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

 

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

當我們把將非ARC的內存管理都管理好后,發現在做有些操作的時候內存還是在一直的緩慢增加 比如做一個最簡單的隨機數UITableView的顯示與滑動,進行內存管理后,不應該出現內存增加的,但是一直滑動內存就一直緩慢的往上增加的情況。

這時候我們可以檢查下看這里的屬性是否打勾:

或者檢測app一啟動時控制臺有沒有立即輸出下列這句話

 

如果勾上,上面三個選項,控制臺就會出現下列幾行輸出

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 recorder

 

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

3.內存管理方法  

3.1.在非ARC環境下,所有的類方法

在非ARC環境下,所有的類方法初始化

系統不會幫你管理內存。

而且你直接 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://m.survivalescaperooms.com/qingche/
本文版權歸作者和博客園共有,歡迎轉載,但必須保留此段聲明,且在文章頁面明顯位置給出原文連接。  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 册亨县| 新绛县| 凉城县| 怀化市| 普陀区| 南澳县| 潍坊市| 济源市| 静乐县| 贵州省| 安国市| 浪卡子县| 安阳县| 抚远县| 会东县| 邯郸市| 梅河口市| 贵德县| 融水| 龙江县| 海晏县| 莫力| 额敏县| 扎囊县| 钟山县| 南靖县| 高平市| 黔江区| 仪征市| 乡城县| 神农架林区| 合作市| 兖州市| 察雅县| 呼伦贝尔市| 嘉黎县| 延庆县| 五峰| 鄂州市| 胶南市| 临沂市|