1:po 命令:
為 print object 的縮寫衡奥,顯示對象的文本描述(顯示從對象的 description 消息獲得的字符串信息)。例如:
2:設(shè)置全局?jǐn)帱c
? ? ? 運行程序時如果不設(shè)置此斷點 出現(xiàn)錯誤就有可能會直接跳轉(zhuǎn)到main函數(shù)里,所以一定要在運行前先設(shè)置此屬性
3:設(shè)置局部斷點
如圖:
4:Address Sanitizer
1.媽媽再也不用擔(dān)心 EXC_BAD_ACCESS?
EXC_BAD_ACCESS一直是很多開發(fā)者的噩夢,因為這個錯誤很不直觀,出現(xiàn)后往往要花很長時間才能定位到錯誤。蘋果這次帶來了革命性的提升摆霉。
在項目的Scheme中Diagnostics下,選中enable address sanitizer(注意選中后Xcode會重新編譯整個項目)奔坟。
這樣設(shè)置后携栋,如果再出現(xiàn)類似的錯誤會有更詳細(xì)的錯誤信息提示,甚至?xí)袃?nèi)存使用情況的展示咳秉。(等我遇到EXC_BAD_ACCESS)錯誤時在寫例子吧
5:靜態(tài)分析
Xcode能幫我們檢測代碼上可能會出現(xiàn)的內(nèi)存溢出錯誤:啟用如圖
此時稍等XCode檢測完成后如圖
于是修改完成所有錯誤吧
6:查看設(shè)備崩潰日志
?直接上圖
7 使用Instruments動態(tài)分析內(nèi)存泄漏
直接上圖
但是最近測試的時候發(fā)現(xiàn)有很嚴(yán)重的內(nèi)存泄露和循環(huán)引用情況發(fā)生婉支。(/(ㄒoㄒ)/~~block用的有點亂了。)
簡直是一步三泄...
分析了下澜建,
1向挖、首先是蝌以,在block中使用成員變量的時候忘記加上
__weaktypeof(self)weakself =self;
導(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ㄒ)/~~..