初尝黑人巨炮波多野结衣-国产精品区一区二区三区-国产精品一区二区免费看-夜色福利视频-国产99页-亚洲欧美国产中文-69精品丰满人妻无码视频a片-亚洲第一黄-免费无码一区二区三区a片百度-少妇被粗大猛进去69影院-亚洲精品av羞羞禁网站-国产精品久久久久免费a∨大胸-日本调教无遮挡免费视频-欧美成人a区-强迫大乳人妻中文字幕-日韩av无码午夜免费福利制服

歡迎來到酷云建站平臺,全網營銷云系統加盟中心!

海量企業網站模板 · 任您選擇

美出特色,精出品質,一切為了企業更好的營銷

隱藏側欄
Beta
轉載

APP開發之使用Analyze和Instruments工具解決內存泄漏問題

       小程序     2021-12-16     admin     151     0    

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

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

下面徐州APP制作開發公司-百恒網絡為您介紹一下Objective-C工程中ViewController的代碼片段:

Objective-C工程中ViewController的代碼片段一

Objective-C工程中ViewController的代碼片段二

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

在Xcode中,共提供了兩種工具幫助查找泄漏點:Analyze和Instruments。Analyze是靜態分析工具。可以通過Product→Analyze菜單項啟動。圖1所示為使用Analyze工具進行靜態分析之后的代碼界面。Instruments是動態分析工具,它與Xcode集成在一起,可以在Xcode中通過Product→Profile菜單項啟動。如圖2所示,Instruments有很多跟蹤模板可以動態分析和跟蹤內存、CPU和文件系統。

使用Analyze進行靜態分析的代碼界面

Instruments分析工具

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

在圖1所示的Analyze靜態分析結果中,凡是有圖標的行都是工具發現的疑似泄漏點。點擊viewDidLoad方法中疑似泄漏點行末尾的圖標,會展開分析結果,具體如圖3所示。

viewDidLoad方法的疑似泄漏點展開結果

圖3中的線表明了程序執行的路徑。在這個路徑中,第1處說明在第25行中,Objective-C對象的引用計數是1,說明在這里創建了一個Objective-C對象。第2處說明在第27行中引用計數為1,該對象沒有釋放,懷疑有泄漏。這樣的說明已經很明顯地告訴我們問題所在了,[[NSArray alloc] initWithContentsOfFile:plistPath]創建了一個對象,并賦值給listTeams屬性所代表的成員變量,然而完成了賦值工作之后,創建的對象并沒有顯式地發送release和autorelease消息。這里可以將代碼修改如下:

NSArray *array = [[NSArray alloc] initWithContentsOfFile:plistPath];

self.listTeams = array;

[array release];

點擊tableView:cellForRowAtIndexPath:方法中疑似泄漏點行末尾的圖標,展開分析結果,如圖4所示。

tableView:cellForRowAtIndexPath:方法的疑似泄漏點展開結果

這主要說明UITableViewCell *類型的cell對象在第64行有可能存在泄漏。在表視圖中,tableView:cellForRowAtIndexPath:方法用于實例化表視圖單元格并設置數據,因此cell對象實例化后不能馬上釋放,而應該使用autorelease延遲釋放。可以在創建cell對象時發送autorelease消息,將代碼修改如下:

if (cell == nil) {

cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault

reuseIdentifier:CellIdentifier] autorelease];

}

我們再看一下tableView:didSelectRowAtIndexPath:方法中的疑似泄漏點,共有兩個。點擊行末尾的圖標,展開分析結果,具體如圖5和圖6所示。

圖5 tableView:didSelectRowAtIndexPath:方法疑似泄漏點1的展現結果 圖6 tableView:didSelectRowAIndexPath:方法疑似泄漏點2的展開結果

圖5所示的是message對象創建之后沒有釋放,我們只需要在[alert show]之后添加[message release]語句代碼就可以了。

在Objective-C中,實例化對象有如下兩種方式:

NSString *message = [[NSString alloc] initWithFormat:@'您選擇了%@隊。', rowValue]; ①

NSString *message = [NSString stringWithFormat:@'您選擇了%@隊。', rowValue]; ②

第①行所示的以init開頭的構造方法在alloc之后調用,我們將其稱為“實例構造方法”。對于使用該方法創建的對象,其所有權是調用者,調用者需要對它的生命周期負責,具體說就是負責創建和釋放。第②行所示的以string開頭的方法,它通過類直接調用,我們將其稱為“類級構造方法”。對于使用該方法創建的對象,其所有權非調用者所有,調用者無權釋放它,否則就會因過度釋放而“僵尸化”。

圖6所示的是UIAlertView *類型的alert對象創建后沒有釋放,我們只需要在[alert show]之后添加[alertrelease]語句就可以了。修改之后的代碼如下:

UIAlertView *類型的alert對象創建后沒有釋放

上面介紹的是使用Analyze靜態分析查找可疑泄漏點。之所以稱為“可疑泄漏點”,是因為這些點未必一定泄漏。確認這些點是否泄漏,還要通過Instruments動態分析工具中的Leaks和Allocations跟蹤模板。Analyze靜態分析只是一個理論上的預測過程。在Xcode中通過Product→Profile菜單項啟動Instruments動態分析工具,接著選擇Leaks模板,打開的界面如圖7所示。

Instruments的Leaks模板

在Instruments中,雖然選擇了Leaks模板,但默認情況下也會添加Allocations模板。基本上凡是分析內存都會使用Allocations模板,它可以監控內存分布情況。選中Allocations模板(圖中①區域),右邊的③區域會顯示隨著時間的變化內存使用的折線圖,同時在④區域會顯示內存使用的詳細信息以及對象分配情況。點擊Leaks模板(圖中②區域),可以查看內存泄漏情況。如圖8所示,如果在③區域有紅線出現,則有內存泄漏,④區域則會顯示泄漏的對象。

Instruments檢測到的內存泄漏

圖8中出現的泄漏是在點擊表視圖中單元格測試tableView:didSelectRowAtIndexPath:方法時發生的,點擊泄漏對象Address列后面的按鈕,會進入如圖9所示的詳細界面。可以發現,里面有兩個對象,可以看到它們的內存地址、占用字節、所屬框架和響應方法等信息。

查看泄露的詳細信息

在圖9中,點擊右邊的跟蹤堆棧信息按鈕,如圖10所示,其中圖標所示的條目是我們自己應用的代碼,點擊它即可進入程序代碼,如圖11所示。

圖10 查看堆棧信息 圖11 查看泄漏點

圖11所示的第84行代碼是可能的泄漏點。事實上,內存泄漏是極其復雜的問題,工具使用是一方面,經驗是另一方面。提高經驗,然后借助于工具才是解決內存泄漏的根本。


--結束END--

本文鏈接: http://www.44kckc.cn/start/2387.html (轉載時請注明來源鏈接)

 
本文標簽: 全部

下班PC閱讀不方便?

手機也可以隨時學習開發

微信關注公眾號“酷云”
"酷云平臺前端開發教學"
每日干貨技術分享
 

×

成為 酷云平臺 代理商!

關注

微信
關注

微信掃一掃
獲取最新優惠信息

酷云平臺公眾號

客服

聯系
客服

很高興為您服務
尊敬的用戶,歡迎您咨詢,我們為新用戶準備了優惠好禮。 咨詢客服

聯系客服:

在線QQ: 3206174

客服電話: 0516-83703228

售前咨詢 售后服務
在線交談 智能小云

工作時間:

周一至周五: 09:00 - 17:00

WAP

手機
訪問

移動端訪問
手機上也能選模板

酷云平臺手機端

初尝黑人巨炮波多野结衣-国产精品区一区二区三区-国产精品一区二区免费看-夜色福利视频-国产99页-亚洲欧美国产中文-69精品丰满人妻无码视频a片-亚洲第一黄-免费无码一区二区三区a片百度-少妇被粗大猛进去69影院-亚洲精品av羞羞禁网站-国产精品久久久久免费a∨大胸-日本调教无遮挡免费视频-欧美成人a区-强迫大乳人妻中文字幕-日韩av无码午夜免费福利制服
  • <abbr id="uoeka"></abbr>
    <abbr id="uoeka"></abbr>
  • <rt id="uoeka"></rt>
  • 五月激情婷婷在线| 99亚洲精品视频| 国产精品啪啪啪视频| 丁香婷婷激情网| 免费在线观看的av网站| 国产 日韩 亚洲 欧美| 水蜜桃在线免费观看| 小说区视频区图片区| 91小视频在线播放| 第四色婷婷基地| 午夜宅男在线视频| 一区二区三区四区毛片| 福利视频999| 日韩国产精品毛片| 天堂av免费看| 真实国产乱子伦对白视频| 2021国产视频| 欧美一级中文字幕| 女人被男人躁得好爽免费视频| 日本美女爱爱视频| 欧美日韩福利在线| 日本三区在线观看| 国产传媒免费观看| 成人在线视频一区二区三区| 东北少妇不带套对白| 日韩黄色片视频| 日韩在线一区视频| 日韩精品一区二区三区四| 日日橹狠狠爱欧美超碰| 国产av人人夜夜澡人人爽| 成人不卡免费视频| 黄色三级中文字幕| 国产wwwxx| 狠狠噜天天噜日日噜| 免费黄色日本网站| 在线观看免费不卡av| 久久亚洲国产成人精品无码区| 久久国产成人精品国产成人亚洲| 成人性生生活性生交12| 偷拍盗摄高潮叫床对白清晰| 成人综合视频在线| 在线无限看免费粉色视频| 五月丁香综合缴情六月小说| 亚洲欧洲日本精品| 黄色国产一级视频| 婷婷激情综合五月天| av天堂永久资源网| 中国女人做爰视频| 欧美男女交配视频| wwwxxx黄色片| 亚洲熟妇无码一区二区三区导航| 亚洲一区二区三区四区五区xx| 久草视频这里只有精品| 九九九九九九九九| 国产精品乱码久久久久| 国产精品久久..4399| 午夜影院免费版| 中文字幕av专区| 无码人妻丰满熟妇区毛片18| 久久亚洲精品无码va白人极品| 亚洲欧美日韩一二三区| 日韩欧美在线免费观看视频| 动漫av网站免费观看| 精品无码国产一区二区三区av| 日本黄xxxxxxxxx100| 色一情一区二区三区| 狠狠躁狠狠躁视频专区| 天天影视综合色| 无码精品国产一区二区三区免费| 国产乱子伦精品无码专区| 国产成年人在线观看| 91亚洲一区二区| aaaaaaaa毛片| 亚洲欧美一二三| 日本男女交配视频| 日韩精品一区二区在线视频| 国产精品久久久久7777| 国产精品国产对白熟妇| 免费不卡av在线| 人妻熟女一二三区夜夜爱| 99福利在线观看| 色悠悠久久综合网| 久久国产激情视频| 91香蕉视频免费看| 免费的一级黄色片| 日韩精品―中文字幕| 久久久久狠狠高潮亚洲精品| 国产成人av影视| 欧美日韩中文不卡| 日韩不卡视频一区二区| 国产一区二区在线视频播放| 91黄色小网站| 91精产国品一二三产区别沈先生| 四虎4hu永久免费入口| 北条麻妃在线视频观看| 亚洲免费av一区二区三区| 99视频在线观看视频| 中文字幕の友人北条麻妃| 少妇无码av无码专区在线观看 | 偷拍盗摄高潮叫床对白清晰| 日本一道在线观看| 99久久激情视频| 欧美日韩视频免费在线观看| 精品人妻人人做人人爽| 麻豆三级在线观看| 国产免费一区二区视频| 激情 小说 亚洲 图片: 伦| 久久久天堂国产精品| 亚洲精品一二三四五区| 国产成人一区二区三区别| 中文字幕第38页| 久艹视频在线免费观看| 在线播放av中文字幕| 欧美色图另类小说| 久久人妻无码一区二区| 五月婷婷激情久久| 久久这里只有精品23| 手机av在线网站| 色乱码一区二区三区在线| a√天堂在线观看| www.18av.com| 亚洲一二三不卡| 日韩在线不卡一区| 日韩精品一区二区三区不卡| 无码日本精品xxxxxxxxx| 久久久久久久久久久久91| 91国视频在线| 日本午夜激情视频| 欧美精品一区二区三区三州| 永久免费网站视频在线观看| 中文字幕国产高清| 蜜桃福利午夜精品一区| 日日噜噜夜夜狠狠| 免费激情视频在线观看| 日本一极黄色片| 午夜dv内射一区二区| 国产精品乱码久久久久| 欧美aⅴ在线观看| 热久久精品国产| 丁香啪啪综合成人亚洲| 日韩一级片播放| 爱情岛论坛亚洲首页入口章节| 欧美日韩怡红院| 香港日本韩国三级网站| 狠狠操狠狠干视频| 亚洲天堂av一区二区三区| 午夜啪啪小视频| 亚洲一区 在线播放| 欧美中日韩在线| 国产精品自拍片| 欧美性猛交xxx乱久交| jizzzz日本| 丰满女人性猛交| 91午夜在线观看| 最近免费中文字幕中文高清百度| 99视频在线免费| 三级黄色片播放| 国产在线视频在线| 国产精品333| www.国产福利| 久艹在线免费观看| 亚洲成人av免费看| 天天做天天爱天天高潮| 黄色免费视频大全| 伊人影院综合在线| 欧洲精品一区二区三区久久| 黑鬼大战白妞高潮喷白浆| 亚洲a级黄色片| 男女高潮又爽又黄又无遮挡| 亚洲免费黄色网| 国产夫妻自拍一区| the porn av| 青青青免费在线| 一本之道在线视频| 国产真实乱子伦| 成人av在线播放观看| 性生交免费视频| 97超碰在线人人| 精品一区二区成人免费视频 | xxxxxx在线观看| 中文字幕永久有效| 成年网站在线免费观看| 91精品一区二区三区四区| 三上悠亚av一区二区三区| 日韩av在线播放不卡| 97超碰人人爱| 国产性生活一级片| 日本888xxxx| 国产又黄又猛视频| 亚洲美免无码中文字幕在线| 国产乱码一区二区三区四区| 男女视频一区二区三区| www.com毛片| 老太脱裤让老头玩ⅹxxxx| 四虎4hu永久免费入口| 久久久久久久久久毛片| 日本特黄a级片| 日本肉体xxxx裸体xxx免费| 亚洲精品一二三四五区| 成人免费在线小视频|