2011-10-20 71 views
1

在我已經使用autorelease的大部分代碼中,對象最終都是從函數返回的。在此點之後無法調用清除釋放,並且autorelease是要走的路。但是,在對象將傳遞給另一個將保留它的對象的情況下,它正在使用autorelease一樣有效嗎?Autorelease Usage的說明

例如

-(void)foo 
{ 
    SomeClass *someObject = [[[SomeClass alloc] init] autorelease]; 
    //Do some things 
    self.someOtherClass.someProperty = someObject; 
} 

有沒有給它分配給someProperty後釋放對象的任何實際的區別:

-(void)foo 
{ 
    SomeClass *someObject = [[SomeClass alloc] init]]; 
    //Do some things 
    self.someOtherClass.someProperty = someObject; 
    [someObject release]; 
} 

有沒有在後面更優選前者任何情況呢?

回答

1

兩者都是可以接受的,但您有權使用發行版來避免memory spikes an other problems

在這裏發佈是可以接受的,因爲你可以假定對象的接收者會保留它,如果它在後面需要的話。所以你可以放心,一旦給出。

+1

只是一個問題,如果你做了很多繁重的工作。對於像'NSString'或'NSNumber'這樣的較小的對象,通常可以用'-autorelease'來獲得。這是一個判斷呼籲。 –

+0

@JonathanGrynspan同意,這是一個指導,而不是一個規則。 – gcamp

0

我認爲後者總是會在內存使用情況和CPU使用情況方面稍微好一點,但是每次分配的數量很少。

如果您不想寫三行代碼並且沒有性能問題,請隨意使用前者。請注意,前者實際上可以用一個語句寫成,而沒有局部變量。