gpt4 book ai didi

ios - Xcode 10 - UIButton 自定义释放属性在 Swift 4 中很弱

转载 作者:可可西里 更新时间:2023-10-31 23:59:42 27 4
gpt4 key购买 nike

我已经让这段代码完美运行,现在仍然如此,但我似乎看到了一条警告消息:

Instance will be immediately deallocated because property "selectButton" is weak

这只是为了将按钮图像更改为不同大小,具体取决于它是 iPad 还是 iPhone,由于屏幕大小,我尝试更改为:

  @IBOutlet var selectButton : UIButton?

然后将自定义按钮添加到 ViewDidLoad() 中:

  selectButton = UIButton(type: .custom)

但是当应用程序编译时,图像并没有像以前那样出现。

我到处寻找解决此问题的方法,但似乎找不到,对此有什么帮助吗?

我在下面添加了我的代码:

  @IBOutlet weak var selectButton = UIButton(type: .custom)

var bluBtnIphn : String = "blue_iPhone_btn.png"
var orgBtnIphn : String = "org_iPhone_btn.png"

switch UIDevice.current.userInterfaceIdiom {
case .phone:
print(tag,"iPhone Used")
selectButton?.setImage(UIImage(named: bluBtnIphn), for: .normal)
selectButton?.setImage(UIImage(named: orgBtnIphn), for: .highlighted)
case .pad:
print(tag,"iPad Used")
selectButton?.setImage(UIImage(named: bluBtnIpad), for: .normal)
selectButton?.setImage(UIImage(named: orgBtnIpad), for: .highlighted)
case .unspecified:
print("Unknown device..")
default:
break
}

最佳答案

当不再有对它们的strong 引用时,对象将被释放。

在您的情况下,您的 View Controller 只有对按钮的 weak 引用。

而且因为您是在代码中实例化它。这是对它的唯一引用。

您感到困惑的原因是因为您混淆了在 nibs/ Storyboard中创建的按钮和在代码中创建的按钮。

当您从 Nib 或 Storyboard创建按钮时,它看起来像这样......

@IBOutlet weak var someButton: UIButton!
  • @IBOutlet 告诉 Xcode 这是一个 Interface Builder 连接对象
  • weak var 它在 View Controller 中很弱,因为 Storyboard将它添加到 View ,然后 View 获得对它的强引用。

在您的情况下, Storyboard并未创建它,因此请将其更改为...

var selectButton = UIButton(type: .custom)

这将使它成为一个强引用并阻止它解除分配。

编辑:在您发表最新评论后...

如果您通过 Interface Builder 执行此操作,则不要在代码中创建按钮。

如果您在 Interface Builder 中执行此操作,那么您的代码应该...

@IBOutlet weak var someButton: UIButton!

关于ios - Xcode 10 - UIButton 自定义释放属性在 Swift 4 中很弱,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51437935/

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