gpt4 book ai didi

swift - 调用view.removeFromSuperview()后是否需要设置view为nil?

转载 作者:搜寻专家 更新时间:2023-10-31 22:00:10 25 4
gpt4 key购买 nike

在下面的代码中,我有两个按钮。

button1 是可选的,它被赋予了将自身从 superview 中移除的功能。

button2 被分配了一个函数,将 button1 添加到 superview,并解包 button1 的可选类型。

我希望在调用 .removeFromSuperview() 后从内存中释放 button1,这样当你在点击 button1 后点击 button2 时,应用程序会崩溃:

  var button1: UIButton?
override func viewDidLoad() {
super.viewDidLoad()
var frame1 = CGRectMake(100, 150, 150, 40)
button1 = UIButton(frame: frame1)
button1!.setTitle("remove button 1", forState: .Normal)
button1!.setTitleColor(UIColor.blackColor(), forState: .Normal)
self.view.addSubview(button1!)
button1!.addTarget(self, action: "remove:", forControlEvents: .TouchUpInside)

let frame2 = CGRectMake(100, 250, 150, 40)
let button2 = UIButton(frame: frame2)
button2.setTitle("display button 1", forState: .Normal)
button2.setTitleColor(UIColor.blueColor(), forState: .Normal)
button2.addTarget(self, action: "display:", forControlEvents: .TouchUpInside)
self.view.addSubview(button2)
}
func remove(sender: UIButton){
button1?.removeFromSuperview()
}
func display(sender:UIButton){
self.view.addSubview(button1!)
}

当我单击 button1 时,它会从 superview 中删除。但是,当我单击 button2 时,button1 未初始化就返回到 superview。调用button1?.removeFromSuperview()后,是否需要在remove函数中调用button1 = nil?如果不是,button1 是否在某个特定阶段从内存中释放?

最佳答案

这实际上取决于。

如果您的 UIView 实例未分配给其他指针,因此不会增加引用计数,removeFromSuperView 会将引用递减为 0,然后将其释放。在其他情况下,uiview 仍然存在其他强引用。

否则直接释放引用需要uiview = nil。

关于swift - 调用view.removeFromSuperview()后是否需要设置view为nil?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34563397/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com