2013-01-06 50 views
0

是否有從存儲器透視下面的兩行之間的任何差異的Alloc initWithString VS保留

NSString *dbFilePath =[[NSString alloc]initWithString:[[NSBundle mainBundle] pathForResource:dbName ofType:nil]]; 

NSString *dbFilePath =[[[NSBundle mainBundle] pathForResource:dbName ofType:nil] retain]; 

「[的NSString的alloc] initWithString:」 或只是 「保留」

在此先感謝

回答

2

實際上, 沒有區別。但是,在第一種情況下,您暫時再有一個NSString對象存在,而不是第二種情況,即pathForResource返回的對象,它將在之後立即自動釋放。

在第二種情況下,不做任何複製。而是直接保留由pathForResource返回的對象。在高峯時間減少一個物體。

我發現第二段代碼更直接。

但是,我想知道爲什麼你保留從棧中引用的東西。我希望dbFilePath而不是像一個成員變量更持久。

+1

有關covenience構造函數返回自動釋放對象的規則是MRC過時的構造。所有通過構造函數返回的對象都是非常強大的,你存儲它們是非常重要的。 – CodaFi

+1

謝謝,@CodaFi。答案來自居住在MRC世界的人。 –

+1

你是說你從網站上的其他地方解除了這個答案,或者你是指自己;) – CodaFi