objective-c - 使用 NSOperation 处理目标/ Action 弱引用

标签 objective-c ios memory-management nsoperation target-action

我正在使用 NSOperation 来处理 iOS 应用程序中的后台处理,并且我正在尝试了解目标/操作模式。在委托(delegate)模式中,委托(delegate)作为弱引用持有,委托(delegate)对象负责在它dealloc之前将其他对象的委托(delegate)字段设置为nil。在目标/行动模式中,据我所知,出于类似的原因,目标被视为弱引用。但是,当目标对象 dealloc 并且 NSOperation 存在时,“nil”目标字段似乎并不容易当它的目标被解除分配时,该操作有可能仍然坐在队列中。

在这种情况下应该如何处理内存管理(NSOperation 执行后台处理,然后使用 target/action 将值返回给 NSOperation 的创建者) ?

最佳答案

The Target 中所述, 如果控件可能发送操作,则由您确保目标可用。实际上,这不是问题,因为目标通常是在控件之前创建并在控件之后释放的 Controller 。

如果您从操作发送操作消息,则需要确保在操作完成之前不会释放目标。一种方法可能是让目标保留自身直到操作完成。

另一种方法可能是使用操作和目标都知道的中间对象。该操作可以将中间对象视为目标的代理,并将操作发送给它而不是直接将其发送给目标,并且如果它被释放,目标可以适本地更新中间对象。目标和操作都可以在不创建保留循环的情况下保留中间体。我不确定这种方法是否是我的首选——似乎有点过于复杂——但它可能会有所帮助。

关于objective-c - 使用 NSOperation 处理目标/ Action 弱引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6194649/

相关文章:

ios - facebook sdk(iOS) 是否支持 ipv6?

javascript - 如何将信息返回到 Objective-C 中的 javascript 函数?

ios - 标签栏图标显示不正确

ios - 在 ios 中首次启动时, View 会全黑几秒钟, swift

c++ - Ifstream 因未知原因失败

iphone - NSMutable 数组 - 分配和保留对象

ios - 自定义 UITableView 中的单元格出队

objective-c - iOS 8 iPhone 上的 UIPopoverPresentationController

objective-c - 如何让 imageview 做一个 segue

c - 如何在c中动态分配静态存储?