A.swift
class A: UIView {
override init() {
super.init()
println("init A")
}
override init(frame: CGRect) {
super.init(frame: frame)
println("initFrame A")
}
}
B.swift
class B: A {
override init() {
super.init()
//P1
println("init B")
}
override init(frame: CGRect) {
super.init(frame: frame)
println("initFrame B")
}
}
然后我称之为B()
:
我有一个输出:
initFrame A
initFrame B
init A
init B
我尝试确定什么?,何时? ...... B()
之后。我希望完全理解它。
init()
中A
位于super.init()
init()
中的A
在init()
B
位于super.init()
init()
中的B
在init()
UIView
位于super.init()
init()
中的UIView
醇>
现在我们在P1
点,对吧?
init()
使用init(frame:)
B
中调用CGRectZero
位于super.init(frame:)
init(frame:)
中的B
在init(frame:)
A
位于super.init(frame:)
init(frame:)
中的A
在init(frame:)
UIView
位于super.init(frame:)
init(frame:)
中的UIView
醇>
现在我们回来了
init(frame:)
UIView
的其余部分
init(frame:)
- >中调用A
的其余部分 initFrame A init(frame:)
- >中调用B
的其余部分 initFrame B 问题是现在发生了什么?我们现在在哪里? (在init()
UIView
内?)在哪里打印init A
和init B
的行?
感谢您的帮助。
答案 0 :(得分:1)
B()
致电B
' s init()
init()
超类B
中定义的A
(由于super.init()
中的B
&#39}。 s init()
)init()
超类A
中定义的UIView
(由于super.init()
A
' s init()
)UIView
' s init()
在当前实例上调用init(frame: CGRectZero)
B
,而类B
会覆盖init(frame: CGRect)
,因此会调用B
自己的方法实现A
init(frame: CGRectZero)
(super.init(frame: frame)
B
中的init(frame: CGRect)
< / LI>
UIView
init(frame: CGRectZero)
被调用(归因于super.init(frame: frame)
自己的A
{/ 1}} A
init(frame: CGRectZero)
(列表中的第6点),打印initFrame A
B
init(frame: CGRectZero)
(第5点),打印initFrame B
UIView
&#39; init()
(第3点),它不会打印任何内容A
&#39; init()
(第2点),打印initA
B
init()
(第1点)完成了我们的行程,打印initB
,标有P1
如果步骤清楚,请告诉我,如果我需要添加更多详细信息以改进解释:我知道它有点令人费解。