利用Instruments中的Leaks處理內(nèi)存泄露

這兩天醫(yī)生端第一版開發(fā)完了,正在進行測試。由于上個健康管理衛(wèi)士是寫的第一個項目,項目中的代碼非常的亂。所以在醫(yī)生端,自己嘗試著對必要的模塊進行了封裝,例如網(wǎng)絡(luò)請求、提示框等在原有三方庫的基礎(chǔ)上進行了二次封裝, 并且把網(wǎng)絡(luò)層完全的抽離了出來,方便統(tǒng)一管理。

但是最近測試的時候發(fā)現(xiàn)有很嚴(yán)重的內(nèi)存泄露和循環(huán)引用情況發(fā)生。(/(ㄒoㄒ)/~~block用的有點亂了。)

簡直是一步三泄...

分析了下,
1、首先是,在block中使用非私有成員變量的時候忘記加上

 __weak typeof(self)weakself = self;  //這一塊在block中使用成員變量的時候需要加一下,關(guān)于這部分詳細(xì)的解釋可以看一下https://www.cnblogs.com/biosli/p/block_usage.html

導(dǎo)致了對象不能及時釋放,造成了循環(huán)引用。(原諒我犯得小白錯誤/(ㄒoㄒ)/~~,后續(xù)要抓緊學(xué)習(xí)學(xué)習(xí)相關(guān)知識??????)。

2、還有就是項目中使用了AFNetworking3.0,我在這個基礎(chǔ)上又進行了封裝,封裝的時候使用的方法,存在問題。(好吧,第一次嘗試果然有好多坑..后續(xù)慢慢填=。 = )。
大概是這樣的,


  分析出來的泄漏點基本都跟網(wǎng)絡(luò)部分有關(guān),好吧看來真的是封裝問題了。??????
  看了一下AFNetworking的官方demo,在網(wǎng)上找了點資料發(fā)現(xiàn)封裝的時候基本使用的都是單例模式來創(chuàng)建AFHTTPSessionManager。而我封裝的每次使用的時候都會創(chuàng)建一個AFHTTPSessionManager,像這樣:

好吧應(yīng)該是這里的問題,接著就把請求改成了單例模式。果然改成單例模式以后內(nèi)存泄露點瞬間就只剩一個了,瞬間感覺世界清晰了好多。


改過之后:

(可是還有一個怎么辦,看到叉號和減號感覺好糾結(jié)..強迫癥么這是.????????。好吧只有繼續(xù)查哪一塊出錯了..)

一查call Tree 是這個樣子,當(dāng)時就懵逼了...這是啥..main出錯這怎么玩...



好吧,點進去一看猜是AppDelegate里面哪個地方出錯了.只好一步一步排查了..(??????)



好吧,,最后定位在鏈接融云這一塊,

融云的解釋是這樣的:

好吧,經(jīng)過測試鏈接融云這一步。連接上的情況下會一直出現(xiàn)上面那個內(nèi)存泄露點,失敗或者將這部分屏蔽的時候不存在內(nèi)存泄露情況。(哪位遇到過這個情況,求指教.??????)(PS. 這個問題解決了,更新成融云最新版本以后,這個內(nèi)存泄露點已經(jīng)解決。現(xiàn)在終于全綠了??????)


努力進階中/(ㄒoㄒ)/~~..

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容