0
-(void)returnString 
{ 
     NSString *str=[[NSString alloc]init]; 
     return [str autorelease]; 
} 
-(void)getString 
{ 
     NSString *p=[self returnString]; 
} 

這是什麼是字符串str的生存期。 str的retainCount何時將變爲零。我知道在runloop結束時其保留數將變爲零。 runloop的結尾是否意味着正在調用returnString的函數的結束。如果不是runloop意味着什麼,runloop的結尾意味着什麼。自動釋放對象的生存期

-(void)returnString 
{ 
     NSString *str=[[NSString alloc]init]; 
     return str; 
} 
-(void)getString 
{ 
    NSString *p=[self returnString]; 
    [p release]; 
} 

這種釋放方式是否正確?

+0

重複http://stackoverflow.com/questions/5766839/end-of-run-loop-autorelease-pool-recovery – Suny 2011-05-30 05:51:53

+0

是否有任何方法通過手動觸發運行循環來釋放autorelease池 – 2011-05-31 03:54:25

回答

1

當你autorelease一個對象,它被添加到autorelease池並排隊等待發布。釋放自動釋放池時,池中的所有對象都會發送一個release消息,並將其從內存中釋放。爲了回答你的問題,只要游泳池存在,對象就會一直保留在內存中,假設它沒有保留在某個點上。

有關詳細信息,請參閱Memory Management Programming GuideAutorelease Pools部分。

1

iOS中的運行循環等待一些事件發生並作用於它。運行循環是一個事件處理循環,用於安排工作並協調接收到的事件。運行循環的目的是在有工作要做時讓線程忙碌,並在沒有線程時讓線程進入睡眠狀態。

您需要在方法中創建Autorelease池,否則它只會在事件循環開始時創建並在事件循環結束時創建。

選中此項。 End of run loop -- autorelease pool recovery