2017-09-06 54 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項目中,因此它們被解除分配。

相關問題