iPhone NSURLConnection初始化问题

时间:2011-07-21 11:26:34

标签: iphone objective-c ios4

这两行之间有什么区别,它们在不同的应用程序中,但第一个似乎有用,我遇到第二个问题;我应该选择哪一个?我的应用程序将不断收到并通过Web服务发回数据。

NSURLConnection *theConnection = [[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

NSURLConnection *theConnection = [NSURLConnection connectionWithRequest:request delegate:self];

在每次didFinishLoading之后,我应该在哪里释放连接对象?但是,每次连接请求都不需要花费太多时间吗?

3 个答案:

答案 0 :(得分:2)

第二个创建一个自动释放的连接,所以如果你没有明确地保留它,它将消失,你的应用程序可能会崩溃。

你可以使用其中任何一个,你只需要了解iPhone上的objective-c内存管理。

good explanation on the Apple site一样,确实值得阅读和理解,因为一旦便士下降,你再也不会犯同样的错误。

答案 1 :(得分:2)

第一个是NSURLConnection的一个实例,你获取对象的所有权,所以你有责任,因此必须释放它。有关ownership reference的详细信息。

第二个是自动释放的对象,因此您无需释放它。当自动释放池耗尽时,它将自动释放。

答案 2 :(得分:2)

在第一行使用init方法创建一个对象,这使您成为对象的所有者,因此必须将其释放。第二行使用方便的构造函数,它不会使您成为该对象的所有者。在这种情况下,如果您想要使用该对象的生命周期进行操作,则必须发送另一条消息来保留它:NSURLConnection * theConnection = [[ NSURLConnection connectionWithRequest:请求委托:self] retain],对象的计数将是2 ..即使在第二行你的对象自动收到一个autorelease消息,之后的计数将是1 ..所以如果你保留对象你必须释放它......

你问:我应该在哪里发布连接对象?我认为在名为connectionDidFinishLoading:connection的方法中或在方法连接中:didFailWithError: