1

苹果提供的样板推送有什么区别和影响

     <#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 development Book)橱柜控制器被添加到接口和@synthesize实现中:

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

我会将其归结为我正在使用的 SDK 与本书相比的新颖性……但这似乎真的不同,并且似乎意味着非常不同的所有权,如果这是正确的话。如果问题太复杂而无法回答,我主要关心的是这些方法中的一种是否更节省内存。

编辑:好的,好吧,在通过发布这个问题来清除我的视野之后......我认为没有太大的区别。样板方法按需分配内存,而书籍方法使橱柜视图成为属性。我认为这使得样板方法以某种方式更好......或相等......我仍然模糊的那部分。似乎两者都将释放相同的内容,但可能使用 books 方法更早地保留了内存。

4

2 回答 2

1

Apple 版本的内存效率更高,因为detailViewController当它从导航控制器的堆栈中弹出时,它的视图将被释放。与在实例变量中保留 的 PragProg 版本cabinetController不同(因此防止它被释放),Apple 代码不存储对它正在创建的详细控制器的引用。

如果用户可能经常在箱体控制器和保留它的视图控制器之间来回导航,则 PragProg 实现可能是有意义的,因为这避免了重复创建和释放对象所导致的一些 CPU 开销,但你会必须对其进行分析以查看这是否会产生任何有意义的差异(通常不会)。

于 2010-09-30T01:19:58.113 回答
0

在第二种情况下,cabinetController 似乎是 self 指示的类的属性。在样板中,情况并非如此。

于 2010-09-30T01:19:07.280 回答