<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          iOS 利用runtime自定義內(nèi)存檢測(cè)工具(UIViewController)

          共 735字,需瀏覽 2分鐘

           ·

          2019-11-11 14:49

          UIViewController是我們?cè)趇OS開發(fā)中用的最頻繁的類,是一個(gè)iOS app界面骨架,在mvc的框架下,v就是指UIViewController,幾乎所有的業(yè)務(wù)邏輯都在這里面完成,因此在這種模式下,UIViewController的代碼量比較大,進(jìn)而出現(xiàn)內(nèi)存泄漏的風(fēng)險(xiǎn)也比較大,因此很有必要在開發(fā)的過程中,對(duì)其進(jìn)內(nèi)存泄漏的檢測(cè)。

          內(nèi)存泄漏的工具有很多,Xcode就自帶了集中方式,例如analyze,instrument中的leaks,還有第三方工具M(jìn)LeakFinder等等。在檢測(cè)的時(shí)候,雖然不是100%能夠檢測(cè)出來,但是大部分都是沒問題的,本文就是在研究MLeakFinder第三方庫的基礎(chǔ)上,根據(jù)據(jù)自己的理解,自己寫的一個(gè)關(guān)于UIViewController的自定義內(nèi)存檢測(cè)工具。

          原理分析:

          1、dispatch_after這個(gè)是GCD提供的一個(gè)延時(shí)處理事物的方式,只需要將延時(shí)的任務(wù)放到block中,設(shè)置好時(shí)長即可,而我們將一個(gè)弱引用對(duì)象放到block中,不會(huì)影響對(duì)象的釋放,就有如下的代碼:qPRzrT3DtJ.png

          通常情況下,UIViewController的釋放都是在被UINavigationController pop或者presenter出來后自身dismiss這兩個(gè)時(shí)機(jī)后,而且一定會(huì)走viewDidDisappear這個(gè)方法,但是不是所有的viewWillDisappear都是這兩個(gè)時(shí)機(jī),所以需要區(qū)分標(biāo)記。

          R4qdrfyhN3.png

          另外,為了做到不侵入式,需要用到分類,通過runtime動(dòng)態(tài)交換這些時(shí)機(jī)方法。

          代碼實(shí)現(xiàn):

          7lyP4C2aXE.png

          UIViewController(HxwLeak)?dismiss時(shí)機(jī)及處理延時(shí)任務(wù)

          8Hh8lm3wFm.png

          以上就是這些,具體見demo。



          瀏覽 87
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩AV在线电影 | 日本中文字幕手机在线 | 久久逼逼| 免费清高视频一黄色情 | 国产一区在线播放视频 |