运行后台线程时释放对象时崩溃

时间:2013-07-05 18:16:48

标签: iphone ios objective-c grand-central-dispatch

我有一组对象,由视图控制器初始化并拥有。视图控制器在每个对象中启动fetchData方法,这些方法在后台线程中运行,然后,当它完成后,返回主线程并更改属性 - self.dataFetchComplete,视图控制器是观察。

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

如果在使用此方法完成这些对象之前取消分配视图控制器,则当它到达self.dataFetchComplete = YES;行时,它会崩溃。

如何在解除分配后尝试更改此属性时阻止它崩溃。

编辑:更多信息和清晰度。

1 个答案:

答案 0 :(得分:1)

该块强烈引用selfself可以解除分配的唯一方法是,如果你在其他地方过度释放它(如@Catfish_Man所示)。

  1. 如果您遇到崩溃,请发布崩溃的回溯

  2. 如果发生过度崩溃,请使用Instruments跟踪对象上的所有保留/释放事件。

  3. 运行分析仪并修复它指出的任何问题。