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指示的类的属性。在样板中,情况并非如此。