1

有什麼區別和蘋果這兩個ViewController Pushes有什麼區別?

 <#DetailViewController#> *detailViewController = [[<#DetailViewController#> alloc] initWithNibName:@"<#Nib name#>" bundle:nil]; 
NSManagedObject *selectedObject = [[self fetchedResultsController] objectAtIndexPath:indexPath]; 
// ... 
// Pass the selected object to the new view controller. 
[self.navigationController pushViewController:detailViewController animated:YES]; 
[detailViewController release]; 

提供的樣板推之間的差異的影響,以及這種方法(從PragProg iPhone SDK開發書)櫃控制器添加到接口和@synthesize實施:

[self.navigationController pushViewController:self.cabinetController 
             animated:YES]; 

我會記在我與與書工作的SDK的新穎......但似乎真的不同,似乎暗示着非常不同的所有權,如果這是正確的單詞。如果這個問題過於複雜地回答,我的主要擔心是這些方法之一是否更有記憶效率。

編輯: 好吧,那麼,通過發佈這個問題清除我的視野後......我不認爲有太大的區別。樣板方法根據需要分配內存,其中書籍方法使內閣查看屬性。我認爲這使得樣板法在某種程度上更好......或者相同......這一部分我仍然模糊不清。似乎兩者都會釋放相同的內容,但也許先前使用書籍方法存儲內存。

回答

1

Apple版本的內存效率更高,因爲detailViewController及其視圖在從導航控制器堆棧彈出時將被釋放。與PragProg版本不同,它將cabinetController保留在實例變量中(並因此阻止其被釋放),Apple代碼不存儲對其創建的詳細控制器的引用。

如果用戶可能經常在櫃控制器和保留它的視圖控制器之間來回導航,那麼PragProg的實現可能是有意義的,因爲這樣可以避免由於重複創建和釋放對象而導致的CPU開銷,但是你必須對它進行簡要分析,看看它是否會產生任何有意義的差異(通常不會)。

+0

謝謝,這說明了一點問題。 – griotspeak 2010-09-30 02:28:59

0

在第二種情況下,會出現cabinetController是由self指示的類的屬性。在樣板中,情況並非如此。