在Objective-C中释放一个监听器/观察者?

时间:2010-10-16 11:57:55

标签: objective-c memory-management listener observer-pattern

我不确定何时是RELEASE侦听器对象的正确时机。

我有一个对象A,它使用NSURLConnection的initWithRequest方法来检索一些URL。 initWithRequest需要一个委托在dataReceived事件之后监听... 因此,对象A创建一个对象B并将其作为initWithRequest方法的委托传递。

当从网络检索数据时,调用对象B的方法。 在对象B完成其工作后谁有责任释放对象B?!?

TO SUMMARIZE:

对象A创建对象B并使其成为某个事件的侦听器。 事件发生,对象B完成其工作。 在对象B完成其有责任释放它的工作之后?!?

请注意 关于如何在Objective-C中删除Observers有很多问题和答案。 无论如何,我发现他们认为你正在使用KVO模式。

2 个答案:

答案 0 :(得分:1)

您是否尝试过在“完成接收数据”方法中释放对象B?这似乎是其使用寿命的终点。或者,您可以在对象A中维护对它的引用,然后在对象A的dealloc方法中释放它。

答案 1 :(得分:0)

根据NSURLConnection Reference

  

连接保留委托。它   连接时释放委托   完成加载,失败或是   取消。

NSURLConnection在这方面是一个例外 - 大多数对象都不会保留其代理。

因此,在这种情况下,如果 A 希望继续使用B,则对象A应该保留对象B,在这种情况下,它应该在完成时释放它; NSURLConnection将负责自己使用B。