2017-09-06 36 views
0

我的应用程序在代码中分配UI元素弱引用时崩溃,但默认情况下使用故事板时,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! 
} 
+2

这两个都不是一个弱引用 –

+0

我没有看到任何'弱' – sCha

+0

除了上面的两个注释之外,你已经声明了隐含的解包选项 - 你要告诉编译器的可选变量将被设置为某些时候非零值。如果您未能做到这一点,那么只要它尝试使用这些变量,应用程序就会崩溃,因为假设是非零。 – Sparky

回答

0

当故事板(或xib)取消存档UI元素时,它将它们添加为现有视图的子视图。由于这一点,有一个强大的参考(子视图被强烈引用),虽然IBOutlets是弱,但有一个强烈的参考,以防止他们被释放。

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

相关问题