很抱歉,如果之前已经提出这个问题,但我想知道NSURLConnection
最佳内存管理实践是什么。 Apple的示例代码在一种方法中使用-[NSURLConnection initWithRequest:delegate:]
,然后在release
或connection:didFailWithError:
中使用connectionDidFinishLoading:
,但这会发出一堆分析器警告并且似乎有点危险(如果这些方法都没有被称为?)。
我一直在自动释放(使用+[NSURLConnection connectionWithRequest:delegate:]
),这似乎更清晰,但我想知道 - 在这种情况下,是否有可能在连接之前释放NSURLConnection
关闭(例如,下载大文件时)?
答案 0 :(得分:2)
返回自动释放的NSURLConnection
:
+[NSURLConnection connectionWithRequest:delegate:]
如果您想保留retain
所需的引用。完成后release
。
autorelease
已经autorelease
d对象无效。
我认为示例代码会在retain
NSURLConnection
之后的某个位置,然后在连接失败时release
,如示例所示。
这将返回您必须负责清洁的已分配对象
-[NSURLConnection initWithRequest:delegate:]
由于该方法名为init
,因此上面的另一个方法在名称或init
中没有copy
,因此您不必担心内存管理。
如果您的对象在某个时刻在内部创建NSURLConnection
,然后在连接完成或失败时release
,则应将对nsurlconnection的引用重置为nil
。
在您的dealloc
中,您应该清除NSURLConnection
,如果是nil
则不会发生任何事情,但如果仍然分配,则会清除它。
见apple doc about memory management - 这很简单。