Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Advanced guard of DeallocationChecker

r-plus
November 11, 2019

Advanced guard of DeallocationChecker

Advanced guard of DeallocationChecker
potatotips #66 at Yappli

Referenced URLs:
- https://github.com/fastred/DeallocationChecker
- https://speakerdeck.com/corin8823/iosdc-2018-memory-leak

r-plus

November 11, 2019
Tweet

More Decks by r-plus

Other Decks in Technology

Transcript

  1. "EWBODFEHVBSEPG
    DeallocationChecker
    11/11 potatotips #66
    taiki komaba(@r_plus)

    View Slide

  2. UBJLJLPNBCB
    [email protected]

    View Slide

  3. DeallocationChecker
    HJUIVCDPNGBTUSFE%FBMMPDBUJPO$IFDLFS
    EJTQBUDIBGUFS

    View Slide

  4. DeallocationChecker
    viewDidDisappear(_:)࣌ʹͦΕΛ࣮ߦ͢ΔͱϦʔΫνΣοΫग़དྷΔ
    ˠνΣοΫ͍ͨ͠WJFXDPOUSPMMFSຖʹݸผʹ࣮ߦ͢Δඞཁ͕͋Δ

    View Slide

  5. ΊΜͲ͍

    View Slide

  6. ࣗಈνΣοΫ΁
    J04%$ͷ!DPSJO͞Μͷૉ੖Β͍͠-5ʮ໌೔͔Β࢖͑Δ
    7JFX$POUSPMMFSͷ.FNPSZ-FBLݕग़ʯΛࢀর
    IUUQTTQFBLFSEFDLDPNDPSJOJPTEDNFNPSZMFBL
    ʮviewDidDisappear(_:)Λ.FUIPE4XJ[[MJOHͯ͠શͯͷWJFXDPOUSPMMFSΛࣗ
    ಈͰ%FBMMPDBUJPO$IFDLFSͷνΣοΫର৅ʹ͠Α͏ʂʯͱ͍͏࿩

    View Slide

  7. White list view controllers
    Ͱ΋ɺେମ͍͔ͭ͘ྫ֎తͳWJFXDPOUSPMMFS͕ग़ͯ͘Δ
    ্λϒతͳ΍ͭͷWJFXDPOUSPMMFSͱ͔
    Α͘Θ͔ΒΜ4ZTUFN͕࢖ͬͯΔͬΆ͍6*,JUͷ΋ͷͱ͔

    View Slide

  8. White list view controllers
    ˣͷ༷ʹνΣοΫલʹHVBSEΛೖΕΔ͜ͱʹͳΔ

    View Slide

  9. ର৅͕૿͑Δ౓ λϒ͕૿͑Δ౓

    ʹϝϯς͢Δͷ͕ΊΜͲ͍
    ʢ௥Ճ͢Δͷ͕ɺͱ͍͏ΑΓ͸ͦΕΛઆ໌ͨ͠Γ
    ஌Βͳͯͭ͘·ͬͯ͠·͍ແବͳ࣌ؒΛ࢖Θͤͯ͠·ͬͨΓ͢Δࣄ͕ɻʣ

    View Slide

  10. White list view controllers
    ͜ͷ΁ΜͷHVBSE XIJUFMJTU
    Λ͏·͍ࣄ΍Γ͍ͨ
    ΋ͷʹΑͬͯ͸QSPUPDPM࢖͏ํ๏΋͋Δ͚Ͳࠓճ͸ผख๏

    View Slide

  11. "EWBODFEHVBSEPG
    DeallocationChecker

    View Slide

  12. Pattern of white list
    λϒత7$ͷ࣮૷͸λϒ੾ସͯ͠΋࠶࡞੒͠ͳͯ͘ྑ͍༷ʹอ༗ͯ͠
    Δˡ͜Ε͕νΣοΫʹͻ͔͔ͬΔݪҼͰ΋͋Δ
    େମͷ࣮૷͸DPOUBJOFSWJFXDPOUSPMMFSͷparent͕ࣗ෼Λอ༗ͯ͠
    Δߏ੒
    $POUBJOFSWJFXDPOUSPMMFS͕ϦʔΫνΣοΫʹೖΔલʹparent͕ࣗ
    ෼Λอ༗͍ͯͨ͠Βର৅֎ʹ͍ͨ͠
    ͔͠͠ viewDidDisappear(_:)ͷͱ͖ʹ͸طʹparentϓϩύςΟ͸OJM

    View Slide

  13. Pattern of white list
    ද͕ࣔ੾ΓସΘΔ࣌ʹparent͕ࣗ਎Λอ༗͍ͯ͠Δ͔อଘ͍ͨ͠
    ͦΕΛ΋ͬͯνΣοΫର৅֎ʹ͢Ε͹λϒͷ7$Λ໢ཏͰ͖Δ

    View Slide

  14. Pattern of white list
    ද͕ࣔ੾ΓସΘΔ࣌ʹ
    parent͕OJMͰ͸ͳ͍λΠϛϯάͰ͋Δ
    removeFromParent(:_) ΛTXJ[[MF
    parent͕ࣗ਎Λอ༗͍ͯ͠Δ͔อଘ͍ͨ͠
    Mirrorobjc_{get,set}AssociatedObject

    View Slide

  15. Swizzle

    View Slide

  16. objc_{get,set}AssociatedObject

    View Slide

  17. Mirror
    parentQSPQFSUZͷܕ͸UIViewController? Ͱ͋ΔͷͰɺͲΜͳܗ
    ࣜͰTUPSFEQSPQFSUZʹอଘ͞Ε͍ͯΔ͔Θ͔Βͳ͍
    ͦ͜ͰMirrorΛར༻͠ϦϑϨΫγϣϯͰTUPSFEQSPQFSUZΛ૸ࠪ
    ͢Δ

    View Slide

  18. Mirror
    ୯७ͳTUPSFEQSPQFSUZ

    View Slide

  19. Mirror
    "SSBZͰอ༗ ͜Ε͕ຆͲ

    View Slide

  20. Mirror
    %JDUͰอ༗ ݟͨ͜ͱͳ͍

    View Slide

  21. Simplified guard
    Ҏ্Swizzling AssociatedObject MirrorͷͭΛ
    ૊Έ߹ΘͤΔͱʜ

    View Slide

  22. Simplified guard
    ͜ͷHVBSEୡ͕ʜ

    View Slide

  23. Simplified guard
    ߦͰεοΩϦʂλϒͷ૿ݮʹ΋ࣗಈతʹରԠ

    View Slide

  24. Recap
    ▸ λϒతͳview controllerͰchild view controllerΛอ༗
    ͯ͠Δέʔεʹ͓͍ͯɺλϒ੾ସ࣌ʹdeinit͞Ε͍ͯͳ
    ͍ͷ͸ϝϞϦϦʔΫͰ͸ͳ͍ʢద੾ʹͳ͍ͬͯΕ͹ʣ
    ▸ Swizzling, AssociatedObject, MirrorΛ૊Έ߹ΘͤΕ͹
    parentͷܕ͕ෆ໌Ͱ΋stored propertyʹࣗ਎Λอ༗͠
    ͍ͯΕ͹แׅతʹϦʔΫνΣοΫର৅֎ͱग़དྷΔ

    View Slide

  25. ͓ΘΓ

    View Slide