我已经让这段代码完美运行,现在仍然如此,但我似乎看到了一条警告消息:
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/