Block技術(shù)在iOS開發(fā)中非常流行也很方便,但是稍微疏忽就可能會產(chǎn)生引用無法被釋放的問題,從而造成內(nèi)存泄漏。那如何知道哪個Block持有了對象并造成內(nèi)存泄漏呢?
成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供納溪企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為納溪眾多企業(yè)、政府機構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。一個解決的方法是在程序運行時通過Xcode的Debug Memory Graph 來查看當(dāng)前進(jìn)程中所有生命周期內(nèi)的對象。這樣可以在調(diào)試時通過這個功能發(fā)現(xiàn)一些本來應(yīng)該被釋放但是卻沒有被釋放的對象。從而確定哪些對象有內(nèi)存泄漏的嫌疑。
當(dāng)點擊某個對象時,右邊可以看出這個對象的內(nèi)存分配情況以及被引用的情況,從而可以進(jìn)一步跟蹤確認(rèn)出對象是被誰持有和引用而沒有被正常的釋放。
在上圖中黑色的線部分就是對象被強引用的序列圖。
回到主題,你可以上面的圖形中看出對象ViewController2是被一個**__NSMallocBlock__** 所持有了,但是你只能看到這個Block對象的內(nèi)存地址(右上角)而已。要想看這個Block所對應(yīng)的實現(xiàn)代碼時你只需要在lldb控制臺輸入如下信息:
(lldb) dis -s *(void**)(0x600002f51110+16) MyLoadTest`__27-[ViewController2 loadView]_block_invoke: 0x10c79c080 <+0>: pushq %rbp 0x10c79c081 <+1>: movq %rsp, %rbp 0x10c79c084 <+4>: subq $0x40, %rsp 0x10c79c088 <+8>: movq %rdi, -0x8(%rbp) 0x10c79c08c <+12>: movq %rdi, %rax 0x10c79c08f <+15>: movq $0x0, -0x10(%rbp) 0x10c79c097 <+23>: leaq -0x10(%rbp), %rcx 0x10c79c09b <+27>: movq %rdi, -0x20(%rbp)
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)建站m.rwnh.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
本文題目:iOS調(diào)試Block引用對象無法被釋放的小技巧分享-創(chuàng)新互聯(lián)
分享地址:http://m.rwnh.cn/article14/doehge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、標(biāo)簽優(yōu)化、網(wǎng)站制作、企業(yè)建站、定制開發(fā)、品牌網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容