gpt4 book ai didi

cocoa - 正确处理异步 NSObject

转载 作者:行者123 更新时间:2023-12-03 17:26:39 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com