gpt4 book ai didi

iphone - 没有所有者的 Cocoa 类的内存管理

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

我有一个 Objective-C 类,它发出 HTTP 请求,并在收到响应后调用其委托(delegate)上的方法。该类为我的应用程序提供了一些围绕内置 NSURLRequest 的便捷方法。

我的问题是:如何确保释放这个对象?通常,对象的所有者负责确保对象被释放。在这种情况下,没有明显的所有者。我想创建这个类的一个实例,设置它的委托(delegate),触发 HTTP 请求,然后忘记它(我可能会发出几个这样的请求,所以给它一个所有者的唯一方法是保留一个列表调用对象中的请求对象,这似乎不是最理想的)。

我考虑过的一种方法:当 HTTP 响应到来时,我的对象调用它的委托(delegate),然后执行 [self autorelease]。问题是所有客户端都必须记住不要释放此实例(否则我的对象需要在返回给用户之前调用retain)。

有人对此有什么好的模式吗?

最佳答案

苹果已经想到了这种模式。假设您正在使用NSURLConnection ,查看 -initWithRequest:delegate: 的文档,这里是关于委托(delegate)参数的说明:

The connection retains delegate. It releases delegate when the connection finishes loading, fails, or is canceled.

[我的重点]

因此,当您创建连接时,请将您的对象设置为委托(delegate)。即使您的其他对象没有保留所有权,它也不会消失,直到连接因任何原因终止为止。

顺便说一句

there's no obvious owner

是假的。你说你的对象有一个委托(delegate)。代表显然是所有者的候选人。

关于iphone - 没有所有者的 Cocoa 类的内存管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4041943/

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