超清精品一区二区三区|熟妇乱子作爱视频大陆|精品亚洲国产成人app|手机看片久久国产永久免费|色天天天天综合男人的天堂|亚洲一区二区在线观看网站|久久精品丰满少妇高潮日出水|2021国产情侣真实露脸在线

連云港網(wǎng)絡(luò)公司,連云港網(wǎng)絡(luò)建設(shè),連云港網(wǎng)絡(luò)推廣

wordpress主題和博客SEO優(yōu)化技巧

自行添加內(nèi)容

連云港網(wǎng)絡(luò)公司資訊 內(nèi)存泄露問題是每個(gè)app都必須關(guān)注的問題,關(guān)系到線上的穩(wěn)定性和性能。內(nèi)存泄露會(huì)導(dǎo)致:

由于內(nèi)存資源不足發(fā)生難以排查的線上bug

由于被泄露對(duì)象的存在導(dǎo)致的一些業(yè)務(wù)bug,比如泄露的對(duì)象仍在接受全局通知

性能問題,導(dǎo)致用戶使用app時(shí)越來越卡

內(nèi)存泄露發(fā)現(xiàn)分成靜態(tài)掃描和運(yùn)行時(shí)檢測(cè),本文主要講運(yùn)行時(shí)檢測(cè)。

靜態(tài)掃描

靜態(tài)掃描的工具:

xcode analyzer

OCLint

Infer

運(yùn)行時(shí)動(dòng)態(tài)檢測(cè)

由于靜態(tài)掃描不能發(fā)現(xiàn)所有的內(nèi)存泄露問題,所以運(yùn)動(dòng)時(shí)檢測(cè)是必不可少的。

Allocation

Xcode的Allocation可以通過比較不同時(shí)間段的對(duì)象,分析出是否發(fā)生了內(nèi)存泄露。但是前提是每個(gè)頁面的命名要符合規(guī)范,比如寶貝詳情頁的所有對(duì)象都是應(yīng)用前綴+寶貝詳情頁面前綴+具體對(duì)象名,這樣才退出頁面的時(shí)候才能知道相應(yīng)的對(duì)象是否被釋放了,因?yàn)閟tack******部的頁面的對(duì)象常駐在內(nèi)存中。

Allocation通過和Monkey配合,在回歸測(cè)試的時(shí)候,自動(dòng)運(yùn)行并通過計(jì)算內(nèi)存占用率可以判斷出新的開發(fā)版本是否發(fā)生了內(nèi)存泄露,但是無法知道具體是哪個(gè)對(duì)象沒有釋放,只能是全局的判斷。

MLLeaksFinder

非常實(shí)用的內(nèi)存泄露檢查工具,主要原理是UINavigationController在pop頁面的時(shí)候,可以預(yù)測(cè)出被pop的頁面將被釋放,所以在一段時(shí)間后(3s)對(duì)這個(gè)對(duì)象進(jìn)行斷言判斷,如果沒有被釋放的話程序就會(huì)中斷,還可以掃描view hierarchy,或者自定義掃描需要的對(duì)象。

相比Allocation,******的好處就是

及時(shí)發(fā)現(xiàn)正在開發(fā)的頁面是否發(fā)生了內(nèi)存泄露,及時(shí)排查,而不是在回歸測(cè)試的時(shí)候才發(fā)現(xiàn)

如果應(yīng)用中的每個(gè)頁面都有相應(yīng)配置的URL scheme的話,那么把所有頁面的url寫在配置文件中,在回歸測(cè)試的時(shí)候,代碼里自動(dòng)push每個(gè)url的頁面,可以做到完整地回歸所有頁面,又免去了Allocation手動(dòng)點(diǎn)擊各個(gè)頁面的繁瑣。

如果嫌MLLeaksFinder代碼太多,可以自己實(shí)現(xiàn)一個(gè)精簡(jiǎn)版的,原理比較簡(jiǎn)單,代碼寫起來很少。

如何排查

上述的各種方法發(fā)現(xiàn)了內(nèi)存泄露后,排查并解決才是最關(guān)鍵的一步。根據(jù)泄露的對(duì)象,重點(diǎn)排查block和兩個(gè)以上對(duì)象循環(huán)引用的情況。

如果是ViewController發(fā)生內(nèi)存泄露,重點(diǎn)查看ViewController里面的block是否忘記聲明weak了,因?yàn)閂iewController被其他對(duì)象持有的情況不常見。如果是用RAC的話,記得weakly和strongly要成對(duì)出現(xiàn),否則會(huì)發(fā)生內(nèi)存泄露。

最常發(fā)生的是View的內(nèi)存泄露問題,首先查看是發(fā)生內(nèi)存泄露的view之間是否有delegate的關(guān)系,如果有的話看看delegate屬性有沒有聲明weak

由于service或者讀取緩存等異步操作引起的內(nèi)存泄露問題

總結(jié)

內(nèi)存泄露問題主要還是靠編碼時(shí)的規(guī)范,靜態(tài)掃描能解決一部分問題,動(dòng)態(tài)掃描是最后的保證。而排查內(nèi)存泄露經(jīng)驗(yàn)很重要。iOS加密也不能忽視,要對(duì)重要的數(shù)據(jù)進(jìn)行加密,根據(jù)重要程度選擇安全性可靠的方式。幾維安全編譯器基于LLVM編譯器中間層實(shí)現(xiàn),加密代碼與業(yè)務(wù)代碼緊密結(jié)合,有效阻擋逆向分析,加密過程不依賴于特定系統(tǒng)環(huán)境,無兼容性問題。

自行添加內(nèi)容
標(biāo)簽:連云港網(wǎng)絡(luò)公司連云港網(wǎng)站建設(shè)連云港網(wǎng)絡(luò)推廣
分類:網(wǎng)站優(yōu)化| 發(fā)布:william| 查看: | 發(fā)表時(shí)間:2017-11-27
原創(chuàng)文章如轉(zhuǎn)載,請(qǐng)注明:轉(zhuǎn)載自連云港網(wǎng)絡(luò)公司,連云港網(wǎng)站建設(shè),連云港網(wǎng)絡(luò)推廣 http://m.kiveredu.com/blog/
本文鏈接:http://m.kiveredu.com/blog/post/450.html

◎歡迎參與討論,請(qǐng)?jiān)谶@里發(fā)表您的看法、交流您的觀點(diǎn)。

自行添加內(nèi)容