2011-01-25 66 views
-1

嗨,我通常創建另一個類的對象。如果這將會在自動釋放池中,請你給我打電話嗎?或者我們應該手動釋放它。另一個類的Dealloc對象

+2

您需要顯示一些代碼或更好地解釋您的問題,或兩者兼而有之。你創建的一些對象可能是自動釋放的,其他的可能不是...... – 2011-01-25 06:55:59

回答

1

如果初始化複製或新的你有,如果你把一個autorlease與分配那麼他們將被自動釋放

例如取消分配這些

Foo *foo = [[Foo alloc] init]; //you'll have release it somewhere yourself 

而且

Foo *foo = [[[Foo alloc] init] autorelease];// this will be autreleased 
1

簡單的情況是:如果你使用init,你有責任釋放它,無論是通過調用release還是調用autorelease。

例如

NSString *myString = [NSString alloc] init]; // You need to release this 
... 
[myString release]; // Now it's released - don't use it again! 

,或者如果你打算把它送給別人

NSString *myString = [NSString alloc] init]; // This needs releasing 
... 
return [myString autorelease]; // You are finished with it but someone else might want it 

然而,有一些其他情況。

NSString *myString = [NSString stringWithFormat:@"hi"]; 

此對象已在autorelease池中 - 不要釋放它!

NSString *secondString = [myString copy]; 

該對象需要釋放 - 這是自動釋放。

經驗法則:任何與名稱中的init,copy或new相關的東西 - 您製作它,您釋放它。其他任何東西都會被自動釋放。

+1

經驗法則不是很正確:它不是`init`,而是`alloc`,它要求釋放,另外它缺少`new`。 – danyowdee 2011-01-28 16:25:07