Iphone 没有所有者的Cocoa类的内存管理

Iphone 没有所有者的Cocoa类的内存管理,iphone,objective-c,cocoa,Iphone,Objective C,Cocoa,我有一个Objective-C类,它发出HTTP请求,并在收到响应后调用其委托上的方法。该类围绕我的应用程序的内置NSURLRequest提供了一些方便的方法 我的问题是:如何确保释放此对象?通常,对象的所有者负责确保对象被释放。在这种情况下,没有明显的所有者。我想创建这个类的一个实例,设置它的委托,发出HTTP请求,然后忘记它(我可能会发出几个这样的请求,所以给它一个所有者的唯一方法是在调用对象中保留一个请求对象列表,这似乎不太理想) 我考虑过的一种方法是:当HTTP响应出现时,我的对象调用它

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

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

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


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

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

连接将保留代理。当连接完成加载、失败或取消时,它将释放委托

[我的重点]

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

顺便说一下,声明

没有明显的主人


这是错误的。你说你的对象有一个委托。代理显然是所有者的候选人。

苹果公司已经考虑过这种模式。假设您正在使用,请查看
-initWithRequest:delegate:
的文档,这里是关于delegate参数的说明:

连接将保留代理。当连接完成加载、失败或取消时,它将释放委托

[我的重点]

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

顺便说一下,声明

没有明显的主人


这是错误的。你说你的对象有一个委托。该代表显然是所有者的候选人。

你是什么意思?如果实例化一个类,那么就可以释放它。如果有疑问,把它放在你要分配它的类的头文件中,然后在dealloc中发布它。你是什么意思?如果实例化一个类,那么就可以释放它。如果有疑问,把它放在你要分配它的类的头文件中,并在dealloc中释放它。