NSOperation在后台完成,尝试通知主线程,视图不再存在。紧急

时间:2011-05-19 04:06:19

标签: iphone multithreading ios nsoperation nsoperationqueue

我有一个不在主线程中运行的NSOperation。它是从UITableViewController生成的。操作完成后,我想重新加载tableview,因为一些数据已经改变。我已经为背景设置了代表,以便在完成时通知。完成后,我使用performSelectorOnMainThread专门在主线程上调用reloadData的包装器。

在大多数情况下,这很有效,但是,原始(编辑)tableViewController(/ edit)有一个非0的机会被释放,我得到僵尸调用。

所以问题分为两部分:

  1. 是否可以在不保留对象的情况下从后台线程获得委托?
  2. 这只是一个糟糕的设计吗?我应该使用NSNotifications吗?在这种情况下,这会是通知的首选方法吗?
  3. 提前致谢。

1 个答案:

答案 0 :(得分:1)

如果在调用委托上的任何操作之前可能会释放委托,则应保留委托。您可以在tableViewController中设置一个状态来处理调用委托回调并且不使用tableViewController的情况(基本上使回调充当no-op)。完成操作后,只需释放委托对象。

这不是一个糟糕的设计,但你只需要处理这些条件。