简单猜测一下,如果有错误希望大家帮忙纠正。调用栈在最下面
1.准备
1.1 遍历了 layer
数组。并且调用了 _layoutEngine
,发了一个 performPendingChangeNotifications
1.2 和 window 通讯
_applyInvocationsTo:window:
2.Debug 相关的逻辑
中间有一些 UIViewLayoutFeedbackLoopDebugger
的东西
_UIViewLayoutFeedbackLoopDebugger layoutFeedbackLoopDebugger
3.正式�开始前的准备
didEnterLayoutSublayersOfLayerForView:
3.1 跑一个循环
给每个 view 的 layoutEngine 、delegate、_hostsLayoutEngine 赋值
for UIView._imminentLayoutSubviewsCount {
layoutEngine = ?
delegate = ?
hostsLayoutEngine = ?
}
3.2 通知 vc
和 navigationer
一些不知道干什么(我们不关心)的事情
// ==== vc
_viewControllerToNotifyOnLayoutSubviews
_lastNotifiedTraitCollection
_canSkipTraitsAndOverlayUpdatesForViewControllerToNotifyOnLayoutResetState
_updateTraitsIfNecessary
……
4.真正Layout
4.1 LayoutEngine
猜测和 AutoLayout 有关系
_usesLayoutEngineHostingConstraints
_resetLayoutEngineHostConstraints
4.2 view layoutSubviews
willSendLayoutSubviewsToView:
layoutSubviews
didSendLayoutSubviewsToView
4.3 循环 4.1和4.2 一直到直系的子 View 完成布局
_wantsReapplicationOfAutoLayoutWithLayoutDirtyOnEntry
_updateConstraintsAsNecessaryAndApplyLayoutFromEngine
4.4 更新 SafeArea
_updateSafeAreaInsets
5.结束布局前
5.1 通知 vc
willSendViewDidLayoutSubviewsToViewControllerOfView
vc 调用 viewDidLayoutSubviews
didSendViewDidLayoutSubviewsToViewControllerOfView:
vc 的 embeddedDelegate 调用 viewControllerViewDidLayoutSubviews
@protocol _UIViewControllerContentViewEmbedding
- (void)viewController:(id)arg1 viewDidAppear:(_Bool)arg2;
- (void)viewController:(id)arg1 viewDidDisappear:(_Bool)arg2;
- (void)viewController:(id)arg1 viewWillAppear:(_Bool)arg2;
- (void)viewController:(id)arg1 viewWillDisappear:(_Bool)arg2;
- (void)viewControllerViewDidLayoutSubviews:(id)arg1;
- (void)viewControllerViewWillLayoutSubviews:(id)arg1;
@end
5.2 AutoLayout 相关逻辑
_wantsReapplicationOfAutoLayoutWithLayoutDirtyOnEntry:
_updateConstraintsAsNecessaryAndApplyLayoutFromEngine
5.3 转场动画相关(UIPresentationController)
containerViewDidLayoutSubviews
5.4 Debug 相关
_toolsDebugAlignmentRects
_alignmentDebuggingOverlayCreateIfNecessary:
_toolsDebugColorViewBounds
_colorViewBoundsOverlayCreateIfNecessary:
_toolsDebugShouldDetectClippedViews
5.5 圆角相关的逻辑
detectAndHandleClippedView
6.结束布局
6.1 根据布局时间计算这次的 layout 的 hash 值。
_validateLayoutHashHasChangedWithLayoutTime:
这里就有点奇怪了,拿到布局的时间能用来做什么?
6.2 正式退出
willExitLayoutSublayersOfLayerForView
tableView 的调用栈为例
UIKit`-[UIView(CALayerDelegate) layoutSublayersOfLayer:]:
0x1029ee03a <+0>: pushq %rbp
0x1029ee03b <+1>: movq %rsp, %rbp
0x1029ee03e <+4>: pushq %r15
0x1029ee040 <+6>: pushq %r14
0x1029ee042 <+8>: pushq %r13
0x1029ee044 <+10>: pushq %r12
0x1029ee046 <+12>: pushq %rbx
0x1029ee047 <+13>: subq $0x118, %rsp ; imm = 0x118
0x1029ee04e <+20>: movq %rdx, %r14
0x1029ee051 <+23>: movq %rdi, %r13
0x1029ee054 <+26>: movq 0x109bc6d(%rip), %rax ; (void *)0x000000010a39e070: __stack_chk_guard
0x1029ee05b <+33>: movq (%rax), %rax
0x1029ee05e <+36>: movq %rax, -0x30(%rbp)
0x1029ee062 <+40>: movq 0x1463da7(%rip), %rax ; UIView._layer
0x1029ee069 <+47>: movq (%r13,%rax), %rdi
0x1029ee06e <+52>: movq 0x1419b73(%rip), %rsi ; "needsLayout"
0x1029ee075 <+59>: movq 0x109c58c(%rip), %r15 ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee07c <+66>: callq *%r15
0x1029ee07f <+69>: movl %eax, %r12d
0x1029ee082 <+72>: movq 0x1419eff(%rip), %rsi ; "_shouldSkipNormalLayoutForSakeOfTemplateLayout"
0x1029ee089 <+79>: movq %r13, %rdi
0x1029ee08c <+82>: callq *%r15
0x1029ee08f <+85>: testb %al, %al
0x1029ee091 <+87>: jne 0x1029ee968 ; <+2350>
0x1029ee097 <+93>: movq 0x1463b1a(%rip), %rbx ; UIView._viewFlags
0x1029ee09e <+100>: movq (%r13,%rbx), %rax
0x1029ee0a3 <+105>: movq %rax, %rcx
0x1029ee0a6 <+108>: notq %rcx
0x1029ee0a9 <+111>: movabsq $0x60000000000000, %rdx ; imm = 0x60000000000000
0x1029ee0b3 <+121>: testq %rdx, %rcx
0x1029ee0b6 <+124>: jne 0x1029ee19a ; <+352>
0x1029ee0bc <+130>: btq $0x31, %rax
0x1029ee0c1 <+135>: jb 0x1029ee0fc ; <+194>
0x1029ee0c3 <+137>: movq 0x1418646(%rip), %rsi ; "_layoutEngine"
0x1029ee0ca <+144>: movq %r13, %rdi
0x1029ee0cd <+147>: callq *0x109c535(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee0d3 <+153>: movq %rax, %rdi
0x1029ee0d6 <+156>: callq 0x10379c7ea ; symbol stub for: objc_retainAutoreleasedReturnValue
0x1029ee0db <+161>: testq %rax, %rax
0x1029ee0de <+164>: jne 0x1029ee191 ; <+343>
0x1029ee0e4 <+170>: movq 0x1418dcd(%rip), %rsi ; "_hostsLayoutEngine"
0x1029ee0eb <+177>: movq %r13, %rdi
0x1029ee0ee <+180>: callq *0x109c514(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee0f4 <+186>: testb %al, %al
0x1029ee0f6 <+188>: jne 0x1029ee19a ; <+352>
0x1029ee0fc <+194>: movq 0x8(%r13,%rbx), %rax
0x1029ee101 <+199>: testb $0x1, %al
0x1029ee103 <+201>: je 0x1029ee968 ; <+2350>
0x1029ee109 <+207>: movq 0x1418600(%rip), %rsi ; "_layoutEngine"
0x1029ee110 <+214>: movq %r13, %rdi
0x1029ee113 <+217>: callq *%r15
0x1029ee116 <+220>: movq %rax, %rdi
0x1029ee119 <+223>: callq 0x10379c7ea ; symbol stub for: objc_retainAutoreleasedReturnValue
0x1029ee11e <+228>: movq %r15, %rbx
0x1029ee121 <+231>: movq %rax, %r15
0x1029ee124 <+234>: movq 0x1419e55(%rip), %rsi ; "performPendingChangeNotifications"
0x1029ee12b <+241>: movq %r15, %rdi
0x1029ee12e <+244>: callq *%rbx
0x1029ee130 <+246>: movq %r15, %rdi
0x1029ee133 <+249>: movq %rbx, %r15
0x1029ee136 <+252>: movq 0x1463a7b(%rip), %rbx ; UIView._viewFlags
0x1029ee13d <+259>: callq *0x109c4cd(%rip) ; (void *)0x00000001050f6cc0: objc_release
0x1029ee143 <+265>: movq 0x10(%r13,%rbx), %rax
0x1029ee148 <+270>: movq (%r13,%rbx), %rcx
0x1029ee14d <+275>: movq 0x8(%r13,%rbx), %rdx
0x1029ee152 <+280>: andq $-0x2, %rdx
0x1029ee156 <+284>: movq %rcx, (%r13,%rbx)
0x1029ee15b <+289>: movq %rax, 0x10(%r13,%rbx)
0x1029ee160 <+294>: movq %rdx, 0x8(%r13,%rbx)
0x1029ee165 <+299>: btq $0x31, %rcx
0x1029ee16a <+304>: jb 0x1029ee968 ; <+2350>
0x1029ee170 <+310>: movq %r13, %rdi
0x1029ee173 <+313>: movq 0x1418596(%rip), %rsi ; "_layoutEngine"
0x1029ee17a <+320>: callq *0x109c488(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee180 <+326>: movq %rax, %rdi
0x1029ee183 <+329>: callq 0x10379c7ea ; symbol stub for: objc_retainAutoreleasedReturnValue
0x1029ee188 <+334>: testq %rax, %rax
0x1029ee18b <+337>: je 0x1029ee31c ; <+738>
0x1029ee191 <+343>: movq %rax, %rdi
0x1029ee194 <+346>: callq *0x109c476(%rip) ; (void *)0x00000001050f6cc0: objc_release
0x1029ee19a <+352>: movq 0x10(%r13,%rbx), %rax
0x1029ee19f <+357>: movq (%r13,%rbx), %rcx
0x1029ee1a4 <+362>: movq 0x8(%r13,%rbx), %rdx
0x1029ee1a9 <+367>: testb $0x40, %dl
0x1029ee1ac <+370>: jne 0x1029ee2a3 ; <+617>
0x1029ee1b2 <+376>: btq $0x25, %rcx
0x1029ee1b7 <+381>: jae 0x1029ee22e ; <+500>
0x1029ee1b9 <+383>: movabsq $-0x2000000001, %rsi ; imm = 0xFFFFFFDFFFFFFFFF
0x1029ee1c3 <+393>: andq %rsi, %rcx
0x1029ee1c6 <+396>: movq %rdx, 0x8(%r13,%rbx)
0x1029ee1cb <+401>: movq %rcx, (%r13,%rbx)
0x1029ee1d0 <+406>: movq %rax, 0x10(%r13,%rbx)
0x1029ee1d5 <+411>: movq 0x1459f64(%rip), %rax ; (void *)0x0000000103e8bb30: _UIAppearance
0x1029ee1dc <+418>: movq %rax, -0xb8(%rbp)
0x1029ee1e3 <+425>: movq 0x14125ee(%rip), %rsi ; "window"
0x1029ee1ea <+432>: movq %r13, %rdi
0x1029ee1ed <+435>: callq *%r15
0x1029ee1f0 <+438>: movq %rax, %rdi
0x1029ee1f3 <+441>: callq 0x10379c7ea ; symbol stub for: objc_retainAutoreleasedReturnValue
0x1029ee1f8 <+446>: movl %r12d, %ebx
0x1029ee1fb <+449>: movq %r15, %r12
0x1029ee1fe <+452>: movq %rax, %r15
0x1029ee201 <+455>: movq 0x141a170(%rip), %rsi ; "_applyInvocationsTo:window:"
0x1029ee208 <+462>: movq -0xb8(%rbp), %rdi
0x1029ee20f <+469>: movq %r13, %rdx
0x1029ee212 <+472>: movq %r15, %rcx
0x1029ee215 <+475>: callq *%r12
0x1029ee218 <+478>: movq %r15, %rdi
0x1029ee21b <+481>: movq %r12, %r15
0x1029ee21e <+484>: movl %ebx, %r12d
0x1029ee221 <+487>: movq 0x1463990(%rip), %rbx ; UIView._viewFlags
0x1029ee228 <+494>: callq *0x109c3e2(%rip) ; (void *)0x00000001050f6cc0: objc_release
0x1029ee22e <+500>: movq 0x1463bdb(%rip), %rax ; UIView._layer
0x1029ee235 <+507>: cmpq %r14, (%r13,%rax)
0x1029ee23a <+512>: jne 0x1029ee968 ; <+2350>
0x1029ee240 <+518>: movq 0x145a541(%rip), %rdi ; (void *)0x0000000103e8ad98: _UIViewLayoutFeedbackLoopDebugger
0x1029ee247 <+525>: movq 0x1419692(%rip), %rsi ; "layoutFeedbackLoopDebugger"
0x1029ee24e <+532>: callq *%r15
0x1029ee251 <+535>: movq %rax, %rdi
0x1029ee254 <+538>: callq 0x10379c7ea ; symbol stub for: objc_retainAutoreleasedReturnValue
0x1029ee259 <+543>: movq 0x141a458(%rip), %rsi ; "didEnterLayoutSublayersOfLayerForView:"
0x1029ee260 <+550>: movq %rax, -0xb8(%rbp)
0x1029ee267 <+557>: movq %rax, %rdi
0x1029ee26a <+560>: movq %r13, %rdx
0x1029ee26d <+563>: callq *%r15
0x1029ee270 <+566>: movq 0x1463c29(%rip), %rax ; UIView._imminentLayoutSubviewsCount
0x1029ee277 <+573>: incq (%r13,%rax)
0x1029ee27c <+578>: btq $0x35, (%r13,%rbx)
0x1029ee283 <+585>: movb %r12b, -0xd0(%rbp)
0x1029ee28a <+592>: jb 0x1029ee2be ; <+644>
0x1029ee28c <+594>: xorl %eax, %eax
0x1029ee28e <+596>: movq %rax, -0xc8(%rbp)
0x1029ee295 <+603>: xorl %eax, %eax
0x1029ee297 <+605>: movq %rax, -0xc0(%rbp)
0x1029ee29e <+612>: jmp 0x1029ee34e ; <+788>
0x1029ee2a3 <+617>: orq $0x100, %rdx ; imm = 0x100
0x1029ee2aa <+624>: movq %rcx, (%r13,%rbx)
0x1029ee2af <+629>: movq %rdx, 0x8(%r13,%rbx)
0x1029ee2b4 <+634>: movq %rax, 0x10(%r13,%rbx)
0x1029ee2b9 <+639>: jmp 0x1029ee968 ; <+2350>
0x1029ee2be <+644>: movq 0x141844b(%rip), %rsi ; "_layoutEngine"
0x1029ee2c5 <+651>: movq %r13, %rdi
0x1029ee2c8 <+654>: callq *%r15
0x1029ee2cb <+657>: movq %rax, %rdi
0x1029ee2ce <+660>: callq 0x10379c7ea ; symbol stub for: objc_retainAutoreleasedReturnValue
0x1029ee2d3 <+665>: movq %r15, %rcx
0x1029ee2d6 <+668>: movq %rax, %r15
0x1029ee2d9 <+671>: movq 0x14128e0(%rip), %rsi ; "delegate"
0x1029ee2e0 <+678>: movq %r15, %rdi
0x1029ee2e3 <+681>: movq %rcx, %r12
0x1029ee2e6 <+684>: callq *%rcx
0x1029ee2e8 <+686>: movq %rax, %rdi
0x1029ee2eb <+689>: callq 0x10379c7ea ; symbol stub for: objc_retainAutoreleasedReturnValue
0x1029ee2f0 <+694>: movq %rax, %r14
0x1029ee2f3 <+697>: movq %r15, %rdi
0x1029ee2f6 <+700>: callq *0x109c314(%rip) ; (void *)0x00000001050f6cc0: objc_release
0x1029ee2fc <+706>: testq %r14, %r14
0x1029ee2ff <+709>: je 0x1029ee339 ; <+767>
0x1029ee301 <+711>: movq %r14, %rax
0x1029ee304 <+714>: movq %rax, -0xc0(%rbp)
0x1029ee30b <+721>: orb $0x1, 0x8(%r14,%rbx)
0x1029ee311 <+727>: movb $0x1, %al
0x1029ee313 <+729>: movq %rax, -0xc8(%rbp)
0x1029ee31a <+736>: jmp 0x1029ee34b ; <+785>
0x1029ee31c <+738>: movq 0x1418b95(%rip), %rsi ; "_hostsLayoutEngine"
0x1029ee323 <+745>: movq %r13, %rdi
0x1029ee326 <+748>: callq *0x109c2dc(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee32c <+754>: testb %al, %al
0x1029ee32e <+756>: jne 0x1029ee19a ; <+352>
0x1029ee334 <+762>: jmp 0x1029ee968 ; <+2350>
0x1029ee339 <+767>: xorl %eax, %eax
0x1029ee33b <+769>: movq %rax, -0xc8(%rbp)
0x1029ee342 <+776>: xorl %eax, %eax
0x1029ee344 <+778>: movq %rax, -0xc0(%rbp)
0x1029ee34b <+785>: movq %r12, %r15
0x1029ee34e <+788>: leaq 0x14c9197(%rip), %rax ; __UILogIdenticalLayouts
0x1029ee355 <+795>: cmpb $0x0, (%rax)
0x1029ee358 <+798>: je 0x1029ee361 ; <+807>
0x1029ee35a <+800>: callq 0x10379b1ac ; symbol stub for: CFAbsoluteTimeGetCurrent
0x1029ee35f <+805>: jmp 0x1029ee365 ; <+811>
0x1029ee361 <+807>: xorpd %xmm0, %xmm0
0x1029ee365 <+811>: movsd %xmm0, -0xe8(%rbp)
0x1029ee36d <+819>: movq 0x10(%r13,%rbx), %rax
0x1029ee372 <+824>: movq (%r13,%rbx), %rcx
0x1029ee377 <+829>: movq 0x8(%r13,%rbx), %rdx
0x1029ee37c <+834>: btq $0x36, %rcx
0x1029ee381 <+839>: jb 0x1029ee398 ; <+862>
0x1029ee383 <+841>: movabsq $0x21000000000000, %rsi ; imm = 0x21000000000000
0x1029ee38d <+851>: movq %rcx, %rdi
0x1029ee390 <+854>: andq %rsi, %rdi
0x1029ee393 <+857>: xorq %rsi, %rdi
0x1029ee396 <+860>: jne 0x1029ee3b4 ; <+890>
0x1029ee398 <+862>: movabsq $0x100000000000000, %rsi ; imm = 0x100000000000000
0x1029ee3a2 <+872>: orq %rsi, %rcx
0x1029ee3a5 <+875>: movq %rdx, 0x8(%r13,%rbx)
0x1029ee3aa <+880>: movq %rcx, (%r13,%rbx)
0x1029ee3af <+885>: movq %rax, 0x10(%r13,%rbx)
0x1029ee3b4 <+890>: movq 0x1419245(%rip), %rsi ; "_viewControllerToNotifyOnLayoutSubviews"
0x1029ee3bb <+897>: movq %r13, %rdi
0x1029ee3be <+900>: callq *%r15
0x1029ee3c1 <+903>: movq %rax, %rdi
0x1029ee3c4 <+906>: callq 0x10379c7ea ; symbol stub for: objc_retainAutoreleasedReturnValue
0x1029ee3c9 <+911>: movq %rax, %r14
0x1029ee3cc <+914>: movq 0x1419b35(%rip), %rsi ; "_lastNotifiedTraitCollection"
0x1029ee3d3 <+921>: movq %r14, %rdi
0x1029ee3d6 <+924>: callq *%r15
0x1029ee3d9 <+927>: movq %rax, %rdi
0x1029ee3dc <+930>: callq 0x10379c7ea ; symbol stub for: objc_retainAutoreleasedReturnValue
0x1029ee3e1 <+935>: movq %rax, -0xf0(%rbp)
0x1029ee3e8 <+942>: testq %r14, %r14
0x1029ee3eb <+945>: je 0x1029ee4da ; <+1184>
0x1029ee3f1 <+951>: movq 0x141a2c8(%rip), %rsi ; "_canSkipTraitsAndOverlayUpdatesForViewControllerToNotifyOnLayoutResetState:"
0x1029ee3f8 <+958>: movl $0x1, %edx
0x1029ee3fd <+963>: movq %r13, %rdi
0x1029ee400 <+966>: callq *0x109c202(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee406 <+972>: testb %al, %al
0x1029ee408 <+974>: jne 0x1029ee467 ; <+1069>
0x1029ee40a <+976>: movq 0x141a2b7(%rip), %rsi ; "_updateTraitsIfNecessary"
0x1029ee411 <+983>: movq %r14, %rdi
0x1029ee414 <+986>: callq *%r15
0x1029ee417 <+989>: movq 0x141a2b2(%rip), %rsi ; "_viewDelegateContentOverlayInsetsAreClean"
0x1029ee41e <+996>: movq %r13, %rdi
0x1029ee421 <+999>: callq *%r15
0x1029ee424 <+1002>: testb %al, %al
0x1029ee426 <+1004>: je 0x1029ee457 ; <+1053>
0x1029ee428 <+1006>: movq 0x1419139(%rip), %rsi ; "navigationController"
0x1029ee42f <+1013>: movq %r14, %rdi
0x1029ee432 <+1016>: callq *0x109c1d0(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee438 <+1022>: movq %rax, %rdi
0x1029ee43b <+1025>: callq 0x10379c7ea ; symbol stub for: objc_retainAutoreleasedReturnValue
0x1029ee440 <+1030>: movq %r15, %r12
0x1029ee443 <+1033>: movq %rax, %r15
0x1029ee446 <+1036>: movq %r15, %rdi
0x1029ee449 <+1039>: callq *0x109c1c1(%rip) ; (void *)0x00000001050f6cc0: objc_release
0x1029ee44f <+1045>: testq %r15, %r15
0x1029ee452 <+1048>: movq %r12, %r15
0x1029ee455 <+1051>: je 0x1029ee467 ; <+1069>
0x1029ee457 <+1053>: movq 0x141908a(%rip), %rsi ; "_updateContentOverlayInsetsFromParentIfNecessary"
0x1029ee45e <+1060>: movq %r14, %rdi
0x1029ee461 <+1063>: callq *0x109c1a1(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee467 <+1069>: movq 0x141a26a(%rip), %rsi ; "willSendViewWillLayoutSubviewsToViewControllerOfView:"
0x1029ee46e <+1076>: movq -0xb8(%rbp), %r12
0x1029ee475 <+1083>: movq %r12, %rdi
0x1029ee478 <+1086>: movq %r13, %rdx
0x1029ee47b <+1089>: callq *%r15
0x1029ee47e <+1092>: movq 0x141a25b(%rip), %rsi ; "viewWillLayoutSubviews"
0x1029ee485 <+1099>: movq %r14, %rdi
0x1029ee488 <+1102>: callq *%r15
0x1029ee48b <+1105>: movq 0x141a256(%rip), %rsi ; "didSendViewWillLayoutSubviewsToViewControllerOfView:"
0x1029ee492 <+1112>: movq %r12, %rdi
0x1029ee495 <+1115>: movq %r13, %rdx
0x1029ee498 <+1118>: callq *%r15
0x1029ee49b <+1121>: movq 0x141a24e(%rip), %rsi ; "_embeddedDelegate"
0x1029ee4a2 <+1128>: movq %r14, %rdi
0x1029ee4a5 <+1131>: movq %r15, %r12
0x1029ee4a8 <+1134>: callq *%r15
0x1029ee4ab <+1137>: movq %rax, %rdi
0x1029ee4ae <+1140>: callq 0x10379c7ea ; symbol stub for: objc_retainAutoreleasedReturnValue
0x1029ee4b3 <+1145>: movq %rax, %r15
0x1029ee4b6 <+1148>: testq %r15, %r15
0x1029ee4b9 <+1151>: je 0x1029ee4ce ; <+1172>
0x1029ee4bb <+1153>: movq 0x141a236(%rip), %rsi ; "viewControllerViewWillLayoutSubviews:"
0x1029ee4c2 <+1160>: movq %r15, %rdi
0x1029ee4c5 <+1163>: movq %r14, %rdx
0x1029ee4c8 <+1166>: callq *0x109c13a(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee4ce <+1172>: movq %r15, %rdi
0x1029ee4d1 <+1175>: callq *0x109c139(%rip) ; (void *)0x00000001050f6cc0: objc_release
0x1029ee4d7 <+1181>: movq %r12, %r15
0x1029ee4da <+1184>: movq %r14, -0xd8(%rbp)
0x1029ee4e1 <+1191>: movq 0x1419588(%rip), %rsi ; "_presentationControllerToNotifyOnLayoutSubviews"
0x1029ee4e8 <+1198>: movq %r13, %rdi
0x1029ee4eb <+1201>: callq *0x109c117(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee4f1 <+1207>: movq %rax, %rdi
0x1029ee4f4 <+1210>: callq 0x10379c7ea ; symbol stub for: objc_retainAutoreleasedReturnValue
0x1029ee4f9 <+1215>: movq %rax, %r14
0x1029ee4fc <+1218>: testq %r14, %r14
0x1029ee4ff <+1221>: je 0x1029ee511 ; <+1239>
0x1029ee501 <+1223>: movq 0x141a1f8(%rip), %rsi ; "_containerViewWillLayoutSubviews"
0x1029ee508 <+1230>: movq %r14, %rdi
0x1029ee50b <+1233>: callq *0x109c0f7(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee511 <+1239>: movq -0xd8(%rbp), %rax
0x1029ee518 <+1246>: movq %r14, -0xf8(%rbp)
0x1029ee51f <+1253>: orq %r14, %rax
0x1029ee522 <+1256>: je 0x1029ee576 ; <+1340>
0x1029ee524 <+1258>: movabsq $0x800000000, %rax ; imm = 0x800000000
0x1029ee52e <+1268>: andq 0x8(%r13,%rbx), %rax
0x1029ee533 <+1273>: je 0x1029ee576 ; <+1340>
0x1029ee535 <+1275>: movq 0x141280c(%rip), %rsi ; "traitCollection"
0x1029ee53c <+1282>: movq %r13, %rdi
0x1029ee53f <+1285>: callq *%r15
0x1029ee542 <+1288>: movq %rax, %rdi
0x1029ee545 <+1291>: callq 0x10379c7ea ; symbol stub for: objc_retainAutoreleasedReturnValue
0x1029ee54a <+1296>: movq %r15, %r12
0x1029ee54d <+1299>: movq %rax, %r15
0x1029ee550 <+1302>: movq 0x14199b9(%rip), %rsi ; "_processDidChangeRecursivelyFromOldTraits:toCurrentTraits:forceNotification:"
0x1029ee557 <+1309>: xorl %r8d, %r8d
0x1029ee55a <+1312>: movq %r13, %rdi
0x1029ee55d <+1315>: movq -0xf0(%rbp), %rdx
0x1029ee564 <+1322>: movq %r15, %rcx
0x1029ee567 <+1325>: callq *%r12
0x1029ee56a <+1328>: movq %r15, %rdi
0x1029ee56d <+1331>: movq %r12, %r15
0x1029ee570 <+1334>: callq *0x109c09a(%rip) ; (void *)0x00000001050f6cc0: objc_release
0x1029ee576 <+1340>: movq %r13, %rdi
0x1029ee579 <+1343>: callq 0x10348aa40 ; _UILayoutEngineSolutionIsInRationalEdgesConsultingDelegate
0x1029ee57e <+1348>: testb %al, %al
0x1029ee580 <+1350>: je 0x1029ee5a6 ; <+1388>
0x1029ee582 <+1352>: movq 0x141a17f(%rip), %rsi ; "_usesLayoutEngineHostingConstraints"
0x1029ee589 <+1359>: movq %r13, %rdi
0x1029ee58c <+1362>: callq *0x109c076(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee592 <+1368>: testb %al, %al
0x1029ee594 <+1370>: je 0x1029ee5a6 ; <+1388>
0x1029ee596 <+1372>: movq 0x14196e3(%rip), %rsi ; "_resetLayoutEngineHostConstraints"
0x1029ee59d <+1379>: movq %r13, %rdi
0x1029ee5a0 <+1382>: callq *0x109c062(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee5a6 <+1388>: movq 0x141a163(%rip), %rsi ; "willSendLayoutSubviewsToView:"
0x1029ee5ad <+1395>: movq -0xb8(%rbp), %rbx
0x1029ee5b4 <+1402>: movq %rbx, %rdi
0x1029ee5b7 <+1405>: movq %r13, %rdx
0x1029ee5ba <+1408>: callq *%r15
0x1029ee5bd <+1411>: movq %r15, %r12
0x1029ee5c0 <+1414>: movq 0x1463969(%rip), %r15 ; UIView._layoutSubviewsCount
0x1029ee5c7 <+1421>: incq (%r13,%r15)
0x1029ee5cc <+1426>: movq 0x1412465(%rip), %rsi ; "layoutSubviews"
0x1029ee5d3 <+1433>: movq %r13, %rdi
0x1029ee5d6 <+1436>: callq *%r12
0x1029ee5d9 <+1439>: decq (%r13,%r15)
0x1029ee5de <+1444>: movq 0x14638bb(%rip), %rax ; UIView._imminentLayoutSubviewsCount
0x1029ee5e5 <+1451>: decq (%r13,%rax)
0x1029ee5ea <+1456>: movq 0x141a127(%rip), %rsi ; "didSendLayoutSubviewsToView:"
0x1029ee5f1 <+1463>: movq %rbx, %rdi
0x1029ee5f4 <+1466>: movq %r13, %rdx
0x1029ee5f7 <+1469>: callq *%r12
0x1029ee5fa <+1472>: movq 0x141a11f(%rip), %rsi ; "_wantsReapplicationOfAutoLayoutWithLayoutDirtyOnEntry:"
0x1029ee601 <+1479>: movzbl -0xd0(%rbp), %edx
0x1029ee608 <+1486>: movq %r13, %rdi
0x1029ee60b <+1489>: movl %edx, -0xdc(%rbp)
0x1029ee611 <+1495>: callq *%r12
0x1029ee614 <+1498>: testb %al, %al
0x1029ee616 <+1500>: je 0x1029ee628 ; <+1518>
0x1029ee618 <+1502>: movq 0x1419a29(%rip), %rsi ; "_updateConstraintsAsNecessaryAndApplyLayoutFromEngine"
0x1029ee61f <+1509>: movq %r13, %rdi
0x1029ee622 <+1512>: callq *0x109bfe0(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee628 <+1518>: xorpd %xmm0, %xmm0
0x1029ee62c <+1522>: leaq -0x140(%rbp), %r15
0x1029ee633 <+1529>: movapd %xmm0, 0x30(%r15)
0x1029ee639 <+1535>: movapd %xmm0, 0x20(%r15)
0x1029ee63f <+1541>: movapd %xmm0, 0x10(%r15)
0x1029ee645 <+1547>: movapd %xmm0, (%r15)
0x1029ee64a <+1552>: movq 0x1412eaf(%rip), %rsi ; "subviews"
0x1029ee651 <+1559>: movq %r13, -0xd0(%rbp)
0x1029ee658 <+1566>: movq %r13, %rdi
0x1029ee65b <+1569>: movq 0x109bfa6(%rip), %rax ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee662 <+1576>: movq %rax, %rbx
0x1029ee665 <+1579>: callq *%rbx
0x1029ee667 <+1581>: movq %rax, %rdi
0x1029ee66a <+1584>: callq 0x10379c7ea ; symbol stub for: objc_retainAutoreleasedReturnValue
0x1029ee66f <+1589>: movq %rax, %r14
0x1029ee672 <+1592>: movq 0x14125b7(%rip), %rsi ; "countByEnumeratingWithState:objects:count:"
0x1029ee679 <+1599>: leaq -0xb0(%rbp), %rcx
0x1029ee680 <+1606>: movl $0x10, %r8d
0x1029ee686 <+1612>: movq %r14, %rdi
0x1029ee689 <+1615>: movq %r15, %rdx
0x1029ee68c <+1618>: callq *%rbx
0x1029ee68e <+1620>: movq %rax, %r12
0x1029ee691 <+1623>: testq %r12, %r12
0x1029ee694 <+1626>: je 0x1029ee70a ; <+1744>
0x1029ee696 <+1628>: leaq -0x140(%rbp), %rax
0x1029ee69d <+1635>: movq 0x10(%rax), %rax
0x1029ee6a1 <+1639>: movq (%rax), %r13
0x1029ee6a4 <+1642>: movq 0x1418e65(%rip), %rbx ; "_updateSafeAreaInsets"
0x1029ee6ab <+1649>: xorl %r15d, %r15d
0x1029ee6ae <+1652>: movq -0x130(%rbp), %rax
0x1029ee6b5 <+1659>: cmpq %r13, (%rax)
0x1029ee6b8 <+1662>: je 0x1029ee6c2 ; <+1672>
0x1029ee6ba <+1664>: movq %r14, %rdi
0x1029ee6bd <+1667>: callq 0x10379c778 ; symbol stub for: objc_enumerationMutation
0x1029ee6c2 <+1672>: movq -0x138(%rbp), %rax
0x1029ee6c9 <+1679>: movq (%rax,%r15,8), %rdi
0x1029ee6cd <+1683>: movq %rbx, %rsi
0x1029ee6d0 <+1686>: callq *0x109bf32(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee6d6 <+1692>: incq %r15
0x1029ee6d9 <+1695>: cmpq %r12, %r15
0x1029ee6dc <+1698>: jb 0x1029ee6ae ; <+1652>
0x1029ee6de <+1700>: movl $0x10, %r8d
0x1029ee6e4 <+1706>: movq %r14, %rdi
0x1029ee6e7 <+1709>: movq 0x1412542(%rip), %rsi ; "countByEnumeratingWithState:objects:count:"
0x1029ee6ee <+1716>: leaq -0x140(%rbp), %rdx
0x1029ee6f5 <+1723>: leaq -0xb0(%rbp), %rcx
0x1029ee6fc <+1730>: callq *0x109bf06(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee702 <+1736>: movq %rax, %r12
0x1029ee705 <+1739>: testq %r12, %r12
0x1029ee708 <+1742>: jne 0x1029ee6a4 ; <+1642>
0x1029ee70a <+1744>: movq %r14, %rdi
0x1029ee70d <+1747>: callq *0x109befd(%rip) ; (void *)0x00000001050f6cc0: objc_release
0x1029ee713 <+1753>: movq -0xd8(%rbp), %r13
0x1029ee71a <+1760>: testq %r13, %r13
0x1029ee71d <+1763>: movq -0xd0(%rbp), %r15
0x1029ee724 <+1770>: je 0x1029ee7e5 ; <+1963>
0x1029ee72a <+1776>: movq 0x1419ff7(%rip), %rsi ; "willSendViewDidLayoutSubviewsToViewControllerOfView:"
0x1029ee731 <+1783>: movq -0xb8(%rbp), %r14
0x1029ee738 <+1790>: movq %r14, %rdi
0x1029ee73b <+1793>: movq %r15, %rdx
0x1029ee73e <+1796>: movq 0x109bec3(%rip), %r12 ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee745 <+1803>: callq *%r12
0x1029ee748 <+1806>: movq 0x1419fe1(%rip), %rsi ; "viewDidLayoutSubviews"
0x1029ee74f <+1813>: movq %r13, %rdi
0x1029ee752 <+1816>: callq *%r12
0x1029ee755 <+1819>: movq 0x1419fdc(%rip), %rsi ; "didSendViewDidLayoutSubviewsToViewControllerOfView:"
0x1029ee75c <+1826>: movq %r14, %rdi
0x1029ee75f <+1829>: movq %r15, %rdx
0x1029ee762 <+1832>: callq *%r12
0x1029ee765 <+1835>: movq 0x1419f84(%rip), %r14 ; "_embeddedDelegate"
0x1029ee76c <+1842>: movq %r13, %rdi
0x1029ee76f <+1845>: movq %r14, %rsi
0x1029ee772 <+1848>: callq *%r12
0x1029ee775 <+1851>: movq %rax, %rdi
0x1029ee778 <+1854>: callq 0x10379c7ea ; symbol stub for: objc_retainAutoreleasedReturnValue
0x1029ee77d <+1859>: movq %rax, %rbx
0x1029ee780 <+1862>: movq %rbx, %rdi
0x1029ee783 <+1865>: callq *0x109be87(%rip) ; (void *)0x00000001050f6cc0: objc_release
0x1029ee789 <+1871>: testq %rbx, %rbx
0x1029ee78c <+1874>: je 0x1029ee7bb ; <+1921>
0x1029ee78e <+1876>: movq %r13, %rdi
0x1029ee791 <+1879>: movq %r14, %rsi
0x1029ee794 <+1882>: callq *%r12
0x1029ee797 <+1885>: movq %rax, %rdi
0x1029ee79a <+1888>: callq 0x10379c7ea ; symbol stub for: objc_retainAutoreleasedReturnValue
0x1029ee79f <+1893>: movq %rax, %rbx
0x1029ee7a2 <+1896>: movq 0x1419f97(%rip), %rsi ; "viewControllerViewDidLayoutSubviews:"
0x1029ee7a9 <+1903>: movq %rbx, %rdi
0x1029ee7ac <+1906>: movq %r13, %rdx
0x1029ee7af <+1909>: callq *%r12
0x1029ee7b2 <+1912>: movq %rbx, %rdi
0x1029ee7b5 <+1915>: callq *0x109be55(%rip) ; (void *)0x00000001050f6cc0: objc_release
0x1029ee7bb <+1921>: movq %r15, %rdi
0x1029ee7be <+1924>: movq 0x1419f5b(%rip), %rsi ; "_wantsReapplicationOfAutoLayoutWithLayoutDirtyOnEntry:"
0x1029ee7c5 <+1931>: movl -0xdc(%rbp), %edx
0x1029ee7cb <+1937>: callq *0x109be37(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee7d1 <+1943>: testb %al, %al
0x1029ee7d3 <+1945>: je 0x1029ee7e5 ; <+1963>
0x1029ee7d5 <+1947>: movq 0x141986c(%rip), %rsi ; "_updateConstraintsAsNecessaryAndApplyLayoutFromEngine"
0x1029ee7dc <+1954>: movq %r15, %rdi
0x1029ee7df <+1957>: callq *0x109be23(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee7e5 <+1963>: movq -0xf8(%rbp), %r13
0x1029ee7ec <+1970>: testq %r13, %r13
0x1029ee7ef <+1973>: je 0x1029ee801 ; <+1991>
0x1029ee7f1 <+1975>: movq 0x1419f50(%rip), %rsi ; "containerViewDidLayoutSubviews"
0x1029ee7f8 <+1982>: movq %r13, %rdi
0x1029ee7fb <+1985>: callq *0x109be07(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee801 <+1991>: xorl %eax, %eax
0x1029ee803 <+1993>: callq 0x10348a567 ; _UIViewShowAlignmentRects
0x1029ee808 <+1998>: testb %al, %al
0x1029ee80a <+2000>: movq 0x14633a7(%rip), %r12 ; UIView._viewFlags
0x1029ee811 <+2007>: jne 0x1029ee82b ; <+2033>
0x1029ee813 <+2009>: movq 0x1459626(%rip), %rdi ; (void *)0x0000000103e6e788: UIView
0x1029ee81a <+2016>: movq 0x1419c97(%rip), %rsi ; "_toolsDebugAlignmentRects"
0x1029ee821 <+2023>: callq *0x109bde1(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee827 <+2029>: testb %al, %al
0x1029ee829 <+2031>: je 0x1029ee848 ; <+2062>
0x1029ee82b <+2033>: movq 0x1419c8e(%rip), %rsi ; "_alignmentDebuggingOverlayCreateIfNecessary:"
0x1029ee832 <+2040>: movl $0x1, %edx
0x1029ee837 <+2045>: movq %r15, %rdi
0x1029ee83a <+2048>: callq *0x109bdc8(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee840 <+2054>: movq %rax, %rdi
0x1029ee843 <+2057>: callq 0x10379c832 ; symbol stub for: objc_unsafeClaimAutoreleasedReturnValue
0x1029ee848 <+2062>: movq 0x14595f1(%rip), %rdi ; (void *)0x0000000103e6e788: UIView
0x1029ee84f <+2069>: movq 0x1419c7a(%rip), %rsi ; "_toolsDebugColorViewBounds"
0x1029ee856 <+2076>: callq *0x109bdac(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee85c <+2082>: testb %al, %al
0x1029ee85e <+2084>: je 0x1029ee87d ; <+2115>
0x1029ee860 <+2086>: movq 0x1419c71(%rip), %rsi ; "_colorViewBoundsOverlayCreateIfNecessary:"
0x1029ee867 <+2093>: movl $0x1, %edx
0x1029ee86c <+2098>: movq %r15, %rdi
0x1029ee86f <+2101>: callq *0x109bd93(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee875 <+2107>: movq %rax, %rdi
0x1029ee878 <+2110>: callq 0x10379c832 ; symbol stub for: objc_unsafeClaimAutoreleasedReturnValue
0x1029ee87d <+2115>: movq 0x14595bc(%rip), %rdi ; (void *)0x0000000103e6e788: UIView
0x1029ee884 <+2122>: movq 0x1419ec5(%rip), %rsi ; "_toolsDebugShouldDetectClippedViews"
0x1029ee88b <+2129>: callq *0x109bd77(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee891 <+2135>: testb %al, %al
0x1029ee893 <+2137>: je 0x1029ee8a5 ; <+2155>
0x1029ee895 <+2139>: movq 0x1419ebc(%rip), %rsi ; "_detectAndHandleClippedView"
0x1029ee89c <+2146>: movq %r15, %rdi
0x1029ee89f <+2149>: callq *0x109bd63(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee8a5 <+2155>: cmpb $0x0, -0xc8(%rbp)
0x1029ee8ac <+2162>: je 0x1029ee8f3 ; <+2233>
0x1029ee8ae <+2164>: movq 0x1417e5b(%rip), %rsi ; "_layoutEngine"
0x1029ee8b5 <+2171>: movq %r15, %rdi
0x1029ee8b8 <+2174>: movq 0x109bd49(%rip), %rax ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee8bf <+2181>: movq %rax, %r14
0x1029ee8c2 <+2184>: callq *%r14
0x1029ee8c5 <+2187>: movq %rax, %rdi
0x1029ee8c8 <+2190>: callq 0x10379c7ea ; symbol stub for: objc_retainAutoreleasedReturnValue
0x1029ee8cd <+2195>: movq %rax, %rbx
0x1029ee8d0 <+2198>: movq 0x14196a9(%rip), %rsi ; "performPendingChangeNotifications"
0x1029ee8d7 <+2205>: movq %rbx, %rdi
0x1029ee8da <+2208>: callq *%r14
0x1029ee8dd <+2211>: movq %rbx, %rdi
0x1029ee8e0 <+2214>: callq *0x109bd2a(%rip) ; (void *)0x00000001050f6cc0: objc_release
0x1029ee8e6 <+2220>: movq -0xc0(%rbp), %rax
0x1029ee8ed <+2227>: andb $-0x2, 0x8(%rax,%r12)
0x1029ee8f3 <+2233>: andb $-0x2, 0x7(%r15,%r12)
0x1029ee8f9 <+2239>: leaq 0x14c8bec(%rip), %rax ; __UILogIdenticalLayouts
0x1029ee900 <+2246>: cmpb $0x0, (%rax)
0x1029ee903 <+2249>: je 0x1029ee922 ; <+2280>
0x1029ee905 <+2251>: callq 0x10379b1ac ; symbol stub for: CFAbsoluteTimeGetCurrent
0x1029ee90a <+2256>: subsd -0xe8(%rbp), %xmm0
0x1029ee912 <+2264>: movq 0x1419e47(%rip), %rsi ; "_validateLayoutHashHasChangedWithLayoutTime:"
0x1029ee919 <+2271>: movq %r15, %rdi
0x1029ee91c <+2274>: callq *0x109bce6(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee922 <+2280>: movq 0x1419e3f(%rip), %rsi ; "willExitLayoutSublayersOfLayerForView:"
0x1029ee929 <+2287>: movq -0xb8(%rbp), %r14
0x1029ee930 <+2294>: movq %r14, %rdi
0x1029ee933 <+2297>: movq %r15, %rdx
0x1029ee936 <+2300>: callq *0x109bccc(%rip) ; (void *)0x00000001050f9940: objc_msgSend
0x1029ee93c <+2306>: movq 0x109bccd(%rip), %rbx ; (void *)0x00000001050f6cc0: objc_release
0x1029ee943 <+2313>: movq %r13, %rdi
0x1029ee946 <+2316>: callq *%rbx
0x1029ee948 <+2318>: movq -0xf0(%rbp), %rdi
0x1029ee94f <+2325>: callq *%rbx
0x1029ee951 <+2327>: movq -0xd8(%rbp), %rdi
0x1029ee958 <+2334>: callq *%rbx
0x1029ee95a <+2336>: movq -0xc0(%rbp), %rdi
0x1029ee961 <+2343>: callq *%rbx
0x1029ee963 <+2345>: movq %r14, %rdi
0x1029ee966 <+2348>: callq *%rbx
0x1029ee968 <+2350>: movq 0x109b359(%rip), %rax ; (void *)0x000000010a39e070: __stack_chk_guard
0x1029ee96f <+2357>: movq (%rax), %rax
0x1029ee972 <+2360>: cmpq -0x30(%rbp), %rax
0x1029ee976 <+2364>: jne 0x1029ee98a ; <+2384>
0x1029ee978 <+2366>: addq $0x118, %rsp ; imm = 0x118
0x1029ee97f <+2373>: popq %rbx
0x1029ee980 <+2374>: popq %r12
0x1029ee982 <+2376>: popq %r13
0x1029ee984 <+2378>: popq %r14
0x1029ee986 <+2380>: popq %r15
0x1029ee988 <+2382>: popq %rbp
0x1029ee989 <+2383>: retq
0x1029ee98a <+2384>: callq 0x10379c32e ; symbol stub for: __stack_chk_fail
网友评论