Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

UBJLJLPNBCB !S@QMVT

Slide 3

Slide 3 text

DeallocationChecker HJUIVCDPNGBTUSFE%FBMMPDBUJPO$IFDLFS EJTQBUDIBGUFSͯ͠TFMG͕ੜ͖࢒͍ͬͯΔ͔ʢϦʔ Ϋ͍ͯ͠Δ͔ʣνΣοΫͯ͠4*("#35౤͛ͯ͘ΕΔϝιουΛఏ ڙͯ͘͠ΕΔ viewDidDisappear(_:)࣌ʹͦΕΛ࣮ߦ͢ΔͱϦʔΫνΣοΫग़དྷΔ

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

ΊΜͲ͍

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

"EWBODFEHVBSEPG DeallocationChecker

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

Swizzle

Slide 16

Slide 16 text

objc_{get,set}AssociatedObject

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

Mirror ୯७ͳTUPSFEQSPQFSUZ

Slide 19

Slide 19 text

Mirror "SSBZͰอ༗ ͜Ε͕ຆͲ

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

Simplified guard ͜ͷHVBSEୡ͕ʜ

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

͓ΘΓ