2012-12-08 97 views
0

我在學習objective-c並想澄清一件事:當我使用autoreleasepool時,我應該在使用測試對象後發送autorelease消息嗎?使用@autoreleasepool併發送autorelease消息

for (int i = 0; i < 10; ++i) 
{ 
    @autoreleasepool { 
     TestClass* tc1 = [[TestClass alloc] init]; 
     //....... do some stuff with tc1 
     [tc1 autorelease]; 
    } 
} 

回答

1
當我使用autoreleasepool

應該用我的測試對象

發送後自動釋放消息他們沒有任何相關無論如何。

你應該做什麼取決於你想要做什麼以及你是否使用自動引用計數。

如果您使用的是ARC(我認爲不是這種情況,因爲您發送autorelease消息),那麼在簡單情況下您就不必擔心釋放對象。 (如果你必須使用先進的內存管理和更復雜的模型,那麼ARC比MRC更復雜,但無論如何...)

如果你不使用ARC,有兩種選擇。 autorelease可讓對象在最內層的自動釋放池的末尾釋放。所以在你提供的例子中,可以這樣做。

但是,自動釋放主要用於從方法/函數返回對象時處置所有權,並且一般而言,您希望在不再需要時將明確的release消息發送給已分配的初始化對象。

+0

好的。因此,如果我使用ARC,即使返回對象表單方法,也不應該執行autorelease操作? – amplifier

+0

@amplifier試試吧!如果你使用ARC,編譯器會在底部使用'autorelease'來啓動你,並且不會編譯你的代碼。 – 2012-12-08 09:10:25

+0

@amplifier(提示:因爲autorelease再一次自動完成了 - [看到這個。](http://www.galloway.me.uk/2012/02/how-does-objc_retainautoreleasedreturnvalue-work/)) – 2012-12-08 09:11:24