正确处理异步NSObject

时间:2010-07-08 07:29:20

标签: cocoa asynchronous copy release nsobject

我遇到类似这样的情况: Objective-C: How to use memory managment properly for asynchronous methods

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

我的两个问题是:

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

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

self.imagesDataSource = [articleImagesParserObject.returnedArray copy];

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

1 个答案:

答案 0 :(得分:0)

我会在几件事情上接你。它可能会开始滚动球。)

你说

  

然后它有一个委托方法   将检索到的数据传输到   呼叫者

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

你说

  

我上面发布的链接给出了2   答案,一个人说是在释放   代表和一个人说释放   立即

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

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

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