为啥我的应用程序在为 ui 元素分配弱引用时崩溃?

Posted

技术标签:

【中文标题】为啥我的应用程序在为 ui 元素分配弱引用时崩溃?【英文标题】: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 发生之前过早访问属性。 【参考方案1】:

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

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

【讨论】:

以上是关于为啥我的应用程序在为 ui 元素分配弱引用时崩溃?的主要内容,如果未能解决你的问题,请参考以下文章

当我溢出分配的字符数组时,为啥我的 C 程序不会崩溃?

当我分配 NSError userInfo 来设置 NSDictionary 时,为啥我的应用程序会崩溃?

当我尝试重新分配()结构指针数组时,为啥我的 C 程序会崩溃?

Kivy Apk Buildozer:ReferenceError:弱引用对象不再存在

为啥 PHP 数组的元素被引用分配时会被修改?

我的应用程序不断崩溃,大概是因为空对象引用错误,但我不知道为啥