2013-07-05 61 views
3

我有一組對象,init'd和視圖控制器擁有。視圖控制器在這些對象中的每一箇中啓動一個fetchData方法,這些對象在後臺線程中運行,然後在完成時返回主線程並更改視圖控制器正在觀察的屬性 - self.dataFetchComplete對象在運行後臺線程時解除分配時發生崩潰

dispatch_async(dispatch_get_main_queue(), ^{   
    self.dataFetchComplete = YES; 
}); 

如果這些對象是用這種方法完成之前視圖控制器被釋放,當它擊中self.dataFetchComplete = YES;線,它崩潰。

如何在釋放後試圖更改此屬性時阻止它崩潰。

編輯:更多信息和清晰度。

+0

您需要提供更多的上下文和代碼。如果你的對象被提前解除分配(並且你知道**它是故意發生的),那麼你的設計問題就很糟糕。 – 2013-07-05 18:18:39

+0

請說明「如果在返回主隊列之前將對象解除分配,嘗試設置此屬性時會引發錯誤。」太多代名詞。什麼對象?什麼回來之前?什麼引發錯誤?你在使用ARC嗎? –

+1

該塊應該捕獲(並保留)自我,因此如果它被釋放,那麼在其他地方有一個錯誤會過度釋放它。 –

回答

1

該塊有很強的參考selfself可以被解除分配的唯一方法是如果你在其他地方過度釋放它(如@Catfish_Man所示)。

  1. 如果你有一個碰撞,後碰撞

  2. 的回溯,如果你有一個過放崩潰,用儀器跟蹤的對象都保留/釋放事件。

  3. 運行分析儀並修復它表明的任何問題。