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

标签 ios swift uibutton

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

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/

相关文章:

javascript - iPhone 5 和全 Canvas 宽度

ios - 使用 View Controller 中的方法调用模态视图,该 View 在加载之前覆盖该 View Controller 的 View

ios - 对成员 'putData' 错误的引用不明确

ios - TableViewController 不更新单元格

ios - 如何在 UITableViewCell 中显示红色 "Cancel"按钮?

ios - 取出过滤后的数据,再次过滤Coredata中的数据

ios - 代码 : failed to get the task for process

objective-c - 当我尝试将它设置为 NSString 时,NSURL 被取消

ios - XCode 4.6 中的圆形按钮

ios - 子类化 iOS 控件 - 代码与 Storyboard