为什么我的应用程序崩溃时,为UI元素分配一个弱引用?
问题描述:
我的应用程序在代码中分配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!
}
答
当故事板(或xib)取消存档UI元素时,它将它们添加为现有视图的子视图。由于这一点,有一个强大的参考(子视图被强烈引用),虽然IBOutlets是弱,但有一个强烈的参考,以防止他们被释放。
如果您在代码中创建视图并将它们添加到weak
引用,除非您已经将它们添加为子视图,否则没有引用,因此没有任何内容保留在这些UI项目中,因此它们被解除分配。
这两个都不是一个弱引用 –
我没有看到任何'弱' – sCha
除了上面的两个注释之外,你已经声明了隐含的解包选项 - 你要告诉编译器的可选变量将被设置为某些时候非零值。如果您未能做到这一点,那么只要它尝试使用这些变量,应用程序就会崩溃,因为假设是非零。 – Sparky