cocoa - 正确处理异步 NSObject

标签 cocoa asynchronous copy release nsobject

我遇到过类似的情况: 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/

相关文章:

c++如何使用两个迭代器从 vector 复制范围

cocoa - NSautorelease 什么时候发布这个?

cocoa - 连接到专用 Controller 时不调用 NSTableView 委托(delegate)

objective-c - cocoa -/+ 声明

cocoa - 设置 TableView 的数据源时无法分配给此表达式的结果

安卓 : Retrofit Callback success and failure executed asynchronously?

file - 如何将文件(PDF)传输到 Hadoop 文件系统

c# - 超时使用 TaskCompletionSource 实现的异步方法

PHP cURL 同步和异步

eclipse - 在Eclipse中使用Ant复制文件到Tomcat目录