麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發(fā)設計 > 正文

IOS性能調優(yōu)系列:使用Zombies動態(tài)分析內存中的僵尸對象

2019-11-14 19:29:59
字體:
來源:轉載
供稿:網友

硬廣:《IOS性能調優(yōu)系列》第四篇,預計會有二十多篇,持續(xù)更新,歡迎關注。

前兩篇《IOS性能調優(yōu)系列:Analyze靜態(tài)分析》、《IOS性能調優(yōu)系列:使用Instruments動態(tài)分析內存泄漏》關注了內存泄露的問題,本篇正好相反,關注的是內存中那些被過度釋放的對象(overreleased objects)。

這篇的標題糾結了半天,到底是寫EXC_BAD_access錯誤調試,還是寫內存中僵尸對象的分析,最后還是選了個Duang~Duang~的標題。

今天在論壇上看到個帖子,遇到的就是本篇要分析的問題,正好拿來解釋Bug場景:

相信在使用ARC之前,很多人遇到過EXC_BAD_ACCESS錯誤,這個錯誤可以理解為訪問了已被釋放的對象,蘋果稱之為僵尸對象。

比如在不開啟ARC下,下面這段代碼:

NSString* hello = [NSString stringWithFormat:@"Hello"]; NSLog(@"What you say is %@",hello);  [hello release]; 

hello對象不是手動分配,而是加入到自動釋放池,由釋放池負責釋放,所以第三行調用release時就會產生EXC_BAD_ACCESS錯誤。

在開啟ARC后,可以很大程度上避免產生EXC_BAD_ACCESS錯誤,但也是有出現(xiàn)可能的,比如IOS里使用了C++代碼,C++部分的對象是不會有ARC來管理的。

EXC_BAD_ACCESS錯誤不像訪問空指針一樣容易定位,往往報錯時很難查找到錯誤點,所以XCode在Instruments中提供了單獨的Zombies工具來分析這類錯誤。

使用Zombies分析的原理


 

和使用 Instruments的其他工具一樣,點擊XCode的PRoduct菜單Profile啟動Instruments:

可以看到Zombies工具下邊的介紹,用于查找那些被過度釋放的僵尸對象。

Zombies工具的查找原理其實和設置NSZombieEnabled環(huán)境變量的調試方式是一樣的,啟動Zombies后在內部設置了NSZombieEnabled為True。

啟用了NSZombieEnabled的話,它會用一個僵尸來替換默認的dealloc實現(xiàn),也就是在引用計數(shù)降到0時,該僵尸實現(xiàn)會將該對象轉換成僵尸對象。僵尸對象的作用是在你向它發(fā)送消息時,就不會向之前那樣Crash或者產生 一個難以理解的行為,而是放出一個錯誤消息,它會顯示一段日志并自動跳入調試器, 因此我們就可以找到具體或者大概是哪個對象被錯誤的釋放了。

使用Zombies分析的步驟


 

1、啟動Instruments,選擇Zombies;

2、對之前產生EXC_BAD_ACCESS的測試用例重新運行,直到程序崩潰,如果發(fā)生EXC_BAD_ACCESS錯誤,會出現(xiàn)以下界面:

3、通過滑動箭頭來查看錯誤細節(jié),例如可以看到該對象的內存操作過程,如malloc、autorelease、retain、release等操作;

4、查看底部的詳細歷史,選擇相應的行可以定位到相應的代碼,找出產生錯誤的代碼:

基本上通過查看Zombies工具給出的信息找出錯誤代碼行是比較簡單的,Zombies也只有在產生EXC_BAD_ACCESS錯誤時才有用。

手動設置NSZombieEnabled環(huán)境變量:


 

XCode也提供了手動設置NSZombieEnabled環(huán)境變量的方法,不過設置NSZombieEnabled為True后,會導致內存占用的增長,同時會影響Leaks工具的調試,這是因為設置NSZombieEnabled會用僵尸對象來代替已釋放對象。

點擊Product菜單Edit Scheme打開該頁面,然后勾選Enable Zombie Objects 復選框:

一般不建議進行進行手動設置,而應該使用Zombies工具進行調試。


 

記錄,為更好的自己!轉載請注明出處!


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 亚洲影视在线 | 男女羞羞在线观看 | 一区二区久久精品66国产精品 | 日韩欧美综合在线 | 一级黄色在线观看 | 日韩每日更新 | 国产一区二区视频精品 | 韩国精品一区二区三区四区五区 | 欧美老逼| 一级一级一级一级毛片 | 日本精品一区二区 | 亚洲精品一区二区三区在线看 | 蜜桃网在线 | 国产精品久久久久久模特 | 久草在线网址 | 色七七网站 | 午夜生活理论片 | 免费视频www在线观看 | 精品无吗乱吗av国产爱色 | 毛片中文字幕 | 在线成人免费观看www | 羞羞视频免费观看入口 | 久精品久久| www.精品久久 | 草久在线观看视频 | 久久狂草 | 成人一区视频 | 一区二区三区日韩 | 亚洲无毛av| 欧美亚成人 | 久国产精品视频 | 亚洲国产馆 | 精品亚洲综合 | 国产美女视频一区二区三区 | 麻豆小视频在线观看 | 一级色毛片 | 久久久精品视频国产 | 男人天堂免费 | 小情侣嗯啊哦视频www | 国产一级二级毛片 | 97porn|