为什么初始化到weak var
返回变量为nil
而初始化到通常的var
返回预期结果?在上ViewController.swift
下面的代码:为什么在Swift中初始化为`weak`会返回`nil`?
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
,那么当定义“弱变量”(在这种情况下为self
)的视图控制器消失时,“弱变量”就不再按照它。不过,我相信我不会删除代码中的ViewController实例,但不会将它分配给nil
,特别是在其viewDidLoad()
方法中。
因此,如果我正确地得到它,为什么启动时“弱变量”返回nil
?当我与@IBOutlet
一起使用它时,它不会变成nil
(但我不需要明确暗示它)。如果我想从代码中删除它,应该在没有weak
的情况下定义实例变量,特别是在viewDidLoad()
之内?
我想保留在viewDidLoad()
以外的变量,因为我想引用其他方法的实例。这种情况下最好的方法是什么?
https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/ProgrammingWithObjectiveC.pdf第62页:新分配的对象没有强引用,所以它立即解除分配,someObject是设为零。 – 2014-10-01 08:40:50
在Swift中,有两种弱引用类型:weak和Objective-C中的一样,并且是无主的。不同的是,一个无主的引用永远不会是零。好奇地, – gabbler 2014-10-01 08:42:16