Bla*_*ard 12 weak-references ios swift
为什么初始化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在这种情况下)的视图控制器消失时,"weaked变量"就会根据它消失.但是,我相信我不会删除代码中未分配nil给它的ViewController实例,尤其是在其viewDidLoad()方法中.
所以如果我正确地说,为什么"weaked变量" nil在启动时会返回?当我使用它时@IBOutlet,它不会变成nil(但我不需要明确地将它用于异步).我应该在没有weak想要在代码中进行异步化时定义实例变量,特别是在viewDidLoad()?
我想保留变量之外的viewDidLoad()因为我想从其他方法引用该实例.在这种情况下,最好的方法是什么?
Kir*_*ins 16
weak表示变量不保留对象,如果没有其他强引用,它将被释放.@IBOutlet weak变量不是nil,因为这些视图具有来自视图控制器视图层次结构的强引用.
您必须引用您的按钮的强引用,并将其添加到视图层次结构,然后才能将其分配给弱属性,或者只是不使用weak属性.
| 归档时间: | 
 | 
| 查看次数: | 3243 次 | 
| 最近记录: |