2011-05-19 29 views
1

嘿,我有一個快速的autorelease問題。我基本上明白它是如何工作的,但我想知道下面是否會產生內存泄漏。客觀c自動發佈問題

NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init]; 

NSString* string = [[[NSString alloc] init] autorelease]; 
[[string retain] autorelease]; 

[pool drain]; 

將字符串發送兩個釋放消息?

回答

6

想想你與一個對象的保留計數的純粹作爲一個三角洲的互動。

如果你增加一個,你需要減少一個該對象,以便可能被釋放。

所以 - 是的 - 你增加了一倍,並減少了兩倍的代碼。結果將有兩次泄漏。

2

這將不會創建內存泄漏,並且您是正確的,它將從自動發佈池中發送兩條釋放消息。只要你有一個釋放/ autorelease爲每個分配/保留/副本,你不應該得到任何泄漏。