为什么要初始化 weak var
将变量返回为 nil
而初始化到平时 var
返回预期的结果?在下面的代码中 ViewController.swift
:
weak var myButton: UIButton!
var myButtonNotWeak: UIButton!
override func viewDidLoad() {
let frame = CGRect(x: 0, y: 0, width: 100, height: 100)
myButton = UIButton(frame: frame)
myButtonNotWeak = UIButton(frame: frame)
print("\(myButton), \(myButtonNotWeak)")
}
这会将以下内容记录到控制台:
nil, <UIButton: 0x7f946bc424a0; frame = (0 0; 100 100); opaque = NO; layer = <CALayer: 0x7f946bc42920>>
但为什么第一次回归 nil
?我想如果你把变量定义为 weak
,然后当视图控制器定义“weaked变量”(self
在这种情况下)已经消失,“弱变量”已经消失了。但是,我相信我不会删除代码中未分配的ViewController实例 nil
对它,特别是在它内部 viewDidLoad()
方法。
因此,如果我正确理解,为什么“weaked变量”会返回 nil
何时启动?当我用它时 @IBOutlet
,然后它不会成为 nil
(但我不需要明确地反映它)。我应该在没有的情况下定义实例变量 weak
当我想从代码中,特别是在代码中进行异步时 viewDidLoad()
?
我想保留变量之外的变量 viewDidLoad()
因为我想从其他方法引用实例。在这种情况下,最好的方法是什么?