我遇到类似这样的情况: Objective-C: How to use memory managment properly for asynchronous methods
我有一个异步下载的对象&解析xml文档。然后它有一个委托方法,将检索到的数据传输给调用者。
我的两个问题是:
何时发布数据检索对象?我在上面发布的链接给出了2个答案,一个表示在委托中发布,一个表示立即发布,这是正确的(或者如果两个答案都正确则更好)
我的第二个问题是,将检索到的数据传输给调用者的最佳方法是什么?目前我有
self.imagesDataSource = [articleImagesParserObject.returnedArray copy];
我使用了副本,因为据我所知,这使得可变数组不可变。这是对的吗?
答案 0 :(得分:0)
我会在几件事情上接你。它可能会开始滚动球。)
你说
然后它有一个委托方法 将检索到的数据传输到 呼叫者
- 编辑 -
您的意思是您向NSURLConnection的委托发送消息。是的,它只是语义,但它更清晰。
你说
我上面发布的链接给出了2 答案,一个人说是在释放 代表和一个人说释放 立即
您链接的帖子表示,如果您使用NSThread +detachNewThreadSelector:toTarget:withObject:
启动辅助线程,则该线程将保留您的对象,因此如果您已完成它,则可以将其释放,这是正常做法。你没有这样做。
第二种建议的方法是在后台操作完成时提供回调方法。当您使用NSURLConnection并且它已经为您提供了回调挂钩,并且实际上您正在使用它们来返回您下载的数据,这似乎是要走的路。
复制一个可变数组会给你一个不可变的副本,你拥有它 - 所以它应该是self.imagesDataSource = [[articleImagesParserObject.returnedArray copy] autorelease]
,除非imagesDataSource没有保留 - 这是不规则的。