IBoutlet 如何保持初始值变弱?意味着其他一些强大的物体指向?

How IBoutlet hold initial value being weak? Means some other strong object is pointing?

我在故事板上创建了一个按钮,并在源代码中创建了 IBOutlet。

当我尝试重新初始化同一个插座时,它发出警告 "Instance will be immediately deallocated because property 'button' is 'weak'"

我理解这一点,因为没有强指针指向,所以它会释放。 但是最初按钮是有值的,如果它很弱那么一定有其他对象强烈指向它?

布局约束 IBOutlet 的类似情况。

如果是按钮,我认为必须查看(但不确定)。

但是布局冲突了怎么办

如果我想通过以编程方式创建 UI 来实现同样的事情怎么办。

我的意思是弱变量可以保持与 IB 创建的 UI 相同的值。

提前致谢!

从故事板加载场景时,在将引用分配给 @IBOutlet 属性 之前,将按钮添加到视图层次结构中。由于按钮位于视图层次结构中,因此对它有很强的引用。

当你说

self.buttonOutlet = UIButton() 

对新按钮的唯一引用是弱 属性,编译器警告您该对象将立即释放。

在将按钮添加到视图层次结构之前,您可以使用局部变量来保存强引用。

let newButton = UIButton()
self.view.addSubview(newButton)
self.buttonOutlet = newButton