1

我有类似的情况: Objective-C: How to use memory management proper for asynchronous methods

我有一个异步下载和解析 xml 文档的对象。然后它有一个委托方法,将它检索到的数据传输给调用者。

我的两个问题是:

何时释放数据检索对象?我在上面发布的链接给出了 2 个答案,一个说在代表中发布,一个说立即发布,这是正确的(或者如果两个答案都正确,则更好)

我的第二个问题是,将检索到的数据传输给调用者的最佳方式是什么?目前我有

self.imagesDataSource = [articleImagesParserObject.returnedArray copy];

我使用了复制,因为据我所知,这使得可变数组不可变。那是对的吗?

4

1 回答 1

0

我要接你几件事..它可能会开始滚动:)

你说

然后它有一个委托方法,将它检索到的数据传输给调用者

-- 编辑 --
您的意思是您向 NSURLConnection 的代表发送消息。是的,它只是语义,但它更清晰。

你说

我在上面发布的链接给出了 2 个答案,一个说在代表中发布,一个说立即发布

您链接到的帖子说,如果您使用线程启动辅助线程NSThread +detachNewThreadSelector:toTarget:withObject:将保留您的对象,因此如果您已完成它,您可以按照正常做法释放它。你没有这样做。

第二种建议的方法是在后台操作完成时提供回调方法。当您使用 NSURLConnection 并且它已经为您提供了回调挂钩时,实际上您正在使用它们来返回下载的数据,这似乎是要走的路。

复制一个可变数组确实会给你一个不可变的副本,你拥有它 - 所以它应该是self.imagesDataSource = [[articleImagesParserObject.returnedArray copy] autorelease]除非 imagesDataSource 不保留 - 这将是不规则的。

于 2010-07-08T23:47:48.780 回答