1

我正在使用 aNSOperation来处理 iOS 应用程序中的后台处理,并且我正在尝试了解目标/操作模式。在委托模式中,委托作为弱引用持有,委托对象负责在它之前将另一个对象的委托字段设置为 nil dealloc。据我了解,在目标/动作模式中,出于类似的原因,目标被视为弱参考。nil但是,当目标对象为 s 时,“出”目标字段似乎并不容易dealloc,并且使用NSOperations 时,当目标对象被释放时,操作仍有可能位于队列中。

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

4

2 回答 2

2

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

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

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

于 2011-06-01T02:57:55.700 回答
0

UIControl 接受目标的 __weak 引用,因此目标操作方法不会改变目标的生命周期。

NSTimer 接受目标的 __strong 引用,目标在 NSTimer 对象释放之前不会释放。这可能会导致保留循环。

试试这个吊舱:https ://github.com/Elenionl/ELAutoSelector

于 2017-11-28T08:00:55.293 回答