这两个ViewController Pushes有什么区别?
问题描述:
有什么区别和苹果这两个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的新颖......但似乎真的不同,似乎暗示着非常不同的所有权,如果这是正确的单词。如果这个问题过于复杂地回答,我的主要担心是这些方法之一是否更有记忆效率。
编辑: 好吧,那么,通过发布这个问题清除我的视野后......我不认为有太大的区别。样板方法根据需要分配内存,其中书籍方法使内阁查看属性。我认为这使得样板法在某种程度上更好......或者相同......这一部分我仍然模糊不清。似乎两者都会释放相同的内容,但也许先前使用书籍方法存储内存。
答
Apple版本的内存效率更高,因为detailViewController
及其视图在从导航控制器堆栈弹出时将被释放。与PragProg版本不同,它将cabinetController
保留在实例变量中(并因此阻止其被释放),Apple代码不存储对其创建的详细控制器的引用。
如果用户可能经常在柜控制器和保留它的视图控制器之间来回导航,那么PragProg的实现可能是有意义的,因为这样可以避免由于重复创建和释放对象而导致的CPU开销,但是你必须对它进行简要分析,看看它是否会产生任何有意义的差异(通常不会)。
答
在第二种情况下,会出现cabinetController是由self指示的类的属性。在样板中,情况并非如此。
谢谢,这说明了一点问题。 – griotspeak 2010-09-30 02:28:59