【问题标题】:Why my app crashes, when assigning a weak reference to ui elements?为什么我的应用程序在为 ui 元素分配弱引用时崩溃?
【发布时间】:2017-09-06 11:20:53
【问题描述】:

在代码中为 ui 元素分配弱引用时,我的应用程序崩溃,但默认情况下,在使用故事板时,ui 元素被强制分配为弱引用。

class UploadContactShowViewController: BasePage,UITableViewDelegate,UITableViewDataSource, DARChatPhoneShowCellDelegate {

    var counter = 0

    var delegate: UploadContactShowViewControllerDelegate?
    var contact: APContact?

    var contactSelected: APContact?
    var contacts: [DARContact] = []
    var selectedContacts: [DARContact]!
    var checkBoxs: [BEMCheckBox]!

    var avatarImageView: UIImageView!
    var fullNameLabel: UILabel!
    var tableView: UITableView!
}

【问题讨论】:

  • 这些都不是弱引用
  • 我没有看到任何weaks
  • 在您声明的两个 cmets 之外,还有隐式展开的可选项 - 您告诉编译器的可选变量将在某个时候设置为非零值。如果你不这样做,应用程序将在尝试使用这些变量时崩溃,因为假设它们是非零的。
  • 很有可能您的故事板引用插座不正确/不存在,或者您在awakeFromNib 发生之前过早访问属性。

标签: ios iphone swift uiview tableview


【解决方案1】:

当 Storyboard(或 xib)取消归档 UI 元素时,它会将它们作为子视图添加到现有视图中。因此有一个强引用(子视图被强引用),虽然 IBOutlets 很弱,但是有一个强引用来防止它们被释放。

如果您在代码中创建视图并将它们添加到 weak 引用中,除非您已经将它们添加为子视图,否则没有引用因此没有任何东西保留这些 UI 项,因此它们被释放。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多