Block技術(shù)在iOS開(kāi)發(fā)中非常流行也很方便,但是稍微疏忽就可能會(huì)產(chǎn)生引用無(wú)法被釋放的問(wèn)題,從而造成內(nèi)存泄漏。那如何知道哪個(gè)Block持有了對(duì)象并造成內(nèi)存泄漏呢?
成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供納溪企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、H5高端網(wǎng)站建設(shè)、小程序制作等業(yè)務(wù)。10年已為納溪眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。一個(gè)解決的方法是在程序運(yùn)行時(shí)通過(guò)Xcode的Debug Memory Graph 來(lái)查看當(dāng)前進(jìn)程中所有生命周期內(nèi)的對(duì)象。這樣可以在調(diào)試時(shí)通過(guò)這個(gè)功能發(fā)現(xiàn)一些本來(lái)應(yīng)該被釋放但是卻沒(méi)有被釋放的對(duì)象。從而確定哪些對(duì)象有內(nèi)存泄漏的嫌疑。
當(dāng)點(diǎn)擊某個(gè)對(duì)象時(shí),右邊可以看出這個(gè)對(duì)象的內(nèi)存分配情況以及被引用的情況,從而可以進(jìn)一步跟蹤確認(rèn)出對(duì)象是被誰(shuí)持有和引用而沒(méi)有被正常的釋放。
在上圖中黑色的線部分就是對(duì)象被強(qiáng)引用的序列圖。
回到主題,你可以上面的圖形中看出對(duì)象ViewController2是被一個(gè)**__NSMallocBlock__** 所持有了,但是你只能看到這個(gè)Block對(duì)象的內(nèi)存地址(右上角)而已。要想看這個(gè)Block所對(duì)應(yīng)的實(shí)現(xiàn)代碼時(shí)你只需要在lldb控制臺(tái)輸入如下信息:
(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)建站www.cdcxhl.com,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。