为啥我的应用程序在为 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!
【问题讨论】:
这些都不是弱引用 我没有看到任何weak
s
在您声明的两个 cmets 之外,还有隐式展开的可选项 - 您告诉编译器的可选变量将在某个时候设置为非零值。如果你不这样做,应用程序将在尝试使用这些变量时崩溃,因为假设它们是非零的。
很有可能您的故事板引用插座不正确/不存在,或者您在awakeFromNib
发生之前过早访问属性。
【参考方案1】:
当 Storyboard(或 xib)取消归档 UI 元素时,它会将它们作为子视图添加到现有视图中。因此有一个强引用(子视图被强引用),虽然 IBOutlets 很弱,但是有一个强引用来防止它们被释放。
如果您在代码中创建视图并将它们添加到 weak
引用中,除非您已经将它们添加为子视图,否则没有引用因此没有任何东西保留这些 UI 项,因此它们被释放。
【讨论】:
以上是关于为啥我的应用程序在为 ui 元素分配弱引用时崩溃?的主要内容,如果未能解决你的问题,请参考以下文章
当我分配 NSError userInfo 来设置 NSDictionary 时,为啥我的应用程序会崩溃?
当我尝试重新分配()结构指针数组时,为啥我的 C 程序会崩溃?