iOS-內存問題

相對電腦而言,移動設備具有內存少、CPU速度慢等特點,因此iOS開發人員需要盡可能優化應用的性能。性能優化需要考慮的問題很多,本文主要介紹內存的優化。

1.內存管理

OC的內存管理方法,共有2種,分別如下:

MRC:(Manual Reference Counting)

就是由程序員自己負責管理對象生命周期,負責對象的創建和銷毀

ARC:(Automatic Reference Counting)

采用與MRC一樣的內存引用計數管理方法,但不同的是,它在編譯時會在合適的位置插入對象內存釋放(如release、autorelease和retain等),程序員不用關心對象釋放的問題。蘋果推薦在新項目中使用ARC,但在iOS5之前的系統中不能采用ARC。

2.使用Analyse和Instruments工具解決內存泄露問題

內存泄露指一個對象或變量在使用完成后沒有釋放掉,這個對象一直占用這部分內存,直到應用停止。如果這種對象過多,內存就會耗盡,其他應用就無法運行。這個問題在MRC中是比較普遍的問題。

在OC中,釋放對象的內存時,可以發送release和autorelease消息,它們都可以將引用計數減1。當引用計數為0時,release消息會使對象立刻釋放,autorelease消息會將對象放入內存釋放池中延遲釋放。

看看下面這個方法有沒有問題?

- (void)viewDidLoad {? ? [superviewDidLoad];NSBundle*bundle = [NSBundlemainBundle];NSString*plistPath = [bundle pathForResource:@"team"ofType:@"plist"];// 獲取屬性列表文件中的全部數據self.listTeams= [[NSArrayalloc] initWithContentsOfFile:plistPath];}

如果代碼基于ARC,這是沒有問題的,但基于MRC,這就存在內存泄露的可能性。從理論上講,內存泄露是由于對象或者變量沒有釋放引起的,但實踐證明并非所有的未釋放對象或變量都會導致內存泄露,這與硬件環境和操作系統環境有關,因此我們需要檢測工具幫助我們找到這些“泄露點”。

在Xcode中,共提供了兩種工具幫助我們查找泄露點:Analyse和Instruments。

Analyse

Analyze是靜態分析工具。可以通過Product->Analyze菜單項啟動。使用Analyze工具進行靜態分析之后的代碼界面如下圖:

Analyze靜態分析效果圖

凡是帶有藍色圖標的行都是工具發現的疑似泄露點。點擊藍色圖標會展開分析結果,如下圖所示:

Analyze靜態分析效果圖 2

上圖中的線,表明了程序執行的路徑。第41行說明在這里創建了一個OC對象,引用計數器是1。第42行說明對象沒有釋放,懷疑有泄露。

Instruments

Instruments是動態分析工具,它與Xcode集成在一起,可以在Xcode中通過Product->Profile菜單項啟動。Instruments有很多跟蹤模板可以動態分析和跟蹤內存、CPU和文件系統,界面如下圖:

Instruments動態分析工具

我們可以結合使用Analyse和Instruments這兩個工具查找泄露點。先使用Analyze靜態分析查找可以泄露點,再用Instruments動態分析中的Leaks和Allocations跟蹤模板進行動態跟蹤分析,確認這些點是否泄露,或者是否有新的泄露出現等。

文/暴走小熊貓(簡書作者)

原文鏈接:http://www.lxweimin.com/p/ded9eb39c9b2

著作權歸作者所有,轉載請聯系作者獲得授權,并標注“簡書作者”。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,527評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,687評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,640評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,957評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,682評論 6 413
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,011評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,009評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,183評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,714評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,435評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,665評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,148評論 5 365
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,838評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,251評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,588評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,379評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,627評論 2 380

推薦閱讀更多精彩內容

  • 1. 用ARC管理內存 ARC(Automatic ReferenceCounting, 自動引用計數)和iOS5...
    Icec閱讀 1,559評論 0 7
  • 內存管理 簡述OC中內存管理機制。與retain配對使用的方法是dealloc還是release,為什么?需要與a...
    丶逐漸閱讀 1,989評論 1 16
  • iOS內存問題: IBOutlet為啥是weak的?因為subview添加到view上時,view會“擁有”sub...
    davidxwwang閱讀 1,555評論 0 1
  • 早在iOS5.0的時候蘋果就引入了ARC的自動管理機制,剛出來的時候,ARC模式還不是很健全,會存在內存泄漏問題,...
    遛遛食閱讀 528評論 5 3
  • 現在iOS開發已經是ARC甚至是swift的時代,但是內存管理仍是一個重點關注的問題,如果只知盲目開發而不知個中原...
    碼代碼的小馬閱讀 589評論 0 1