我有一个名为RootViewController的主UIViewController为
import UIKit
class RootViewController: UIViewController {
var amIaccessible: Bool = false
override func viewDidLoad() {
super.viewDidLoad()
}
}
和两个名为oneViewController和twoViewController的子控制器继承RootViewController为:(另请阅读我的评论)
import UIKit
class oneViewController: RootViewController {
var amIaccessible: Bool = false
override func viewDidLoad() {
super.viewDidLoad()
amIaccessible = true // I have initialized this variable of RootViewController
}
}
import UIKit
class twoViewController: RootViewController {
var amIaccessible: Bool = false
override func viewDidLoad() {
super.viewDidLoad()
print(amIaccessible) // it should print true as initialized in oneViewController but its printing false :(
}
}
现在的问题是,我的oneViewController是我的应用程序的初始视图,而twoViewController是在第一个视图之后初始化的第二个视图,因此我希望RootViewController成为我的单例类型控制器,可以在应用程序的整个生命周期中保存我的变量和方法。我该如何实现?
我不需要像单独的singleton类这样的解决方案,我也知道这种方式也像制作一个共享实例,该实例可以在整个应用执行期间保存变量。
所以请给我使用继承关系的解决方案
最佳答案
这是您应该注意的一些事情
class oneViewController: RootViewController {
var amIaccessible: Bool = false // here you are overridding the amIaccessible property. so if you will use this with oneViewController object it will always gives you overridden property value
override func viewDidLoad() {
super.viewDidLoad()
amIaccessible = true // here you are changing the overridden amIaccessible property value. if you want to change super class propert value you should use super keyword.
print(self.amIaccessible) // true
print(super.amIaccessible) // false
// for e.g super.amIaccessible = true // in the same way access it with super keyword.
}
}
如果在
twoViewController
中要访问RootViewController
的amIaccessible属性,则必须将super与property一起使用,并且如果从oneViewController
更改amIaccessible属性的值,则在twoViewController
中将无法获得相同的值,因为iOS的每个对象都会创建新属性,并在从内存中取消分配时杀死它们。class twoViewController: RootViewController {
var amIaccessible: Bool = false
override func viewDidLoad() {
super.viewDidLoad()
print(super.amIaccessible) // it will always gives you false
}
}