是什么这两个视图控制器推的区别?
-
26-09-2019 - |
题
有什么区别以及由苹果提供的样板推之间的差异的影响
<#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的新颖......但似乎真的不同,似乎暗示着非常不同的所有权,如果这是正确的单词。我最关心的,如果这个问题太令人费解的回答,是这些方法之一是否是更多的内存效率。
编辑: 好了,好了,通过张贴这个问题清理了我的视线后...我不认为这有多大的差别。需求在书本方法使柜查看属性样板方法分配内存。我认为,使样板方法更好莫名其妙......等于......那部分我仍然模糊。这似乎是两个会释放一样的,但也许是内存使用方法的书籍早些时候举行。
解决方案
苹果版本是更有效的存储器,因为当它被从导航控制器的堆栈中弹出的detailViewController
和它的视图将被释放。不同于PragProg版本,它保留在一个实例变量的cabinetController
(并且因此防止它被解除分配),苹果代码不存储到它的创建细节控制器的引用。
如果用户有可能浏览频繁来回柜控制器而这保留它的视图控制器之间的PragProg实现可能是有意义的,因为这避免了位CPU通过反复创建和释放对象的开销引起的,但你必须来分析,看看是否让任何有意义的差异(这通常不会)。
其他提示
在第二种情况下它会出现cabinetController是由自所表示的类的属性。在样板不是这种情况。
不隶属于 StackOverflow