我遇到过类似的情况: Objective-C: How to use memory managment properly for asynchronous methods
我有一个异步下载和解析 xml 文档的对象。然后它有一个委托(delegate)方法,将它检索到的数据传输给调用者。
我的两个问题是:
什么时候释放数据检索对象?我上面发布的链接给出了两个答案,一个说在委托(delegate)中释放,一个说立即释放,这是正确的(或者如果两个答案都正确,哪个更好)
我的第二个问题是,将检索到的数据传输给调用者的最佳方式是什么?目前我有
self.imagesDataSource = [articleImagesParserObject.returnedArray copy];
我使用了复制,因为据我所知,这使得可变数组不可变。这是正确的吗?
最佳答案
我会告诉你一些事情......这可能会开始:)
你说
It then has a delegate method that transfers the data it retrieved to the caller
-- 编辑 --
您的意思是您向 NSURLConnection 的委托(delegate)发送一条消息。是的,这只是语义,但更清晰。
你说
The link I posted above gives 2 answers, one says release in the delegate and one says release immediately
您链接到的帖子说,如果您使用 NSThread +detachNewThreadSelector:toTarget:withObject:
启动辅助线程,该线程将保留您的对象,因此如果您已经完成它,您可以释放它这是正常做法。你没有这样做。
第二种建议的方法是在后台操作完成时提供回调方法。由于您正在使用 NSURLConnection 并且它已经为您提供了回调 Hook ,并且实际上您正在使用它们来返回下载的数据,因此这似乎是正确的方法。
复制一个可变数组确实会给你一个不可变的副本,你拥有它 - 所以它应该是 self.imagesDataSource = [[articleImagesParserObject.returnedArray copy] autorelease]
除非 imagesDataSource 不保留 - 这会不规则。
关于cocoa - 正确处理异步 NSObject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3201462/