【发布时间】:2016-12-21 12:10:02
【问题描述】:
我有 UINavigationController 和 UITableViewController 的子类。
为了初始化子类,我决定使用一些convenience init 方法来调用超类的一些指定初始化程序。此外,每个子类都有一些let 常量:
let someValue: SomeClass = SomeClass()
每个类都通过调用其新创建的convenience init 方法成功初始化。
问题是let 常量在UINavigationController 子类中被初始化TWICE。
import UIKit
import PlaygroundSupport
final class Navigation: UINavigationController {
convenience init(anyObject: Any) {
self.init(rootViewController: UIViewController())
}
let service = Constant("Constant Initialization -> Navigation")
}
final class Table: UITableViewController {
convenience init(anyObject: Any) {
self.init(style: .plain)
}
let service = Constant("Constant Initialization -> Table")
}
class Constant: NSObject {
init(_ string: String) {
super.init()
debugPrint(string)
}
}
Navigation(anyObject: NSNull())
Table(anyObject: NSNull())
我们可以像上面那样使用convenience init 吗?为什么?
为什么convenience init 在这两种情况下的行为不同?
检查:版本 8.2 beta (8C30a)、版本 8.2 (8C38)、版本 8.2.1 (8C1002)
附:上面代码的 Playground 日志:
"Constant Initialization -> Navigation"
"Constant Initialization -> Navigation"
"Constant Initialization -> Table"
【问题讨论】:
标签: ios swift uinavigationcontroller