如今,似乎有50%的iPhone应用都使用类似Facebook的滑动菜单。我还使用ViewDeck库(https://github.com/Inferis/ViewDeck)使用此UI创建了一些应用程序。左侧视图是UITableView,单击项目会更改中心视图。
我一直在努力进行良好的“菜单管理”。您是否使用所有视图控制器创建NSArray?一次懒加载一个更好吗?你如何处理记忆?在保持内存使用率尽可能低的同时,不确定最佳方法是什么。
当我查看这些滑动菜单库时,从来没有一个完整的示例应用程序具有工作菜单和多个控制器。就像我说的,我已经使用ViewDeck创建了几个应用程序,但视图控制器的实际更改总是感觉笨重而且根本不是最佳的(带有所有实例化视图控制器的数组)。
答案 0 :(得分:3)
我将视图控制器的数组用于视图。当用户选择指向该视图控制器的单元格时,将加载视图。所以这是懒加载。如果你认为你需要注意内存,那么在内存警告上你可以释放你现在不需要的视图控制器。
当然,这取决于你在控制器中有什么,但通常(标准用户界面)你不需要释放它们。我从来不需要。
答案 1 :(得分:1)
首先,请注意我从未使用Facebook应用程序或ViewDeck,基于演示视频,它清楚了库的用途。
我建议您寻找不同的模式,例如有一本书Pro Objective-C Design Patterns for iOS
,它描述了一个非常简单的中介模式,它基本上是控制器的控制器。
内存管理完全取决于任务,我没有看到任何理由一次初始化所有视图控制器,因为它们的视图可能在未显示时被加载。此外,视图并不总是控制器中最耗费资源的部分。这种方法需要非常严格和谨慎的控制器开发,你还必须使它们可重用,这不是那么容易。
相反,我会尝试使其尽可能灵活和简单:使用的视图控制器数组,下一个是按需加载和添加的。它应该与UINavigationController
控制器堆栈非常相似。 UINavigationController
本身就是一个很好的研究样本,你不会有源代码,但你会拥有所有的标题,内部逻辑并不那么困难。
答案 2 :(得分:0)
我所做的是创建了一个容器视图控制器,侧边栏菜单位于视图的底部,这意味着它不可见。最重要的是,我有一个contentView(它只是一个UIView),我有一个UINavigationController,它管理UIViewControllers,导航栏设置为隐藏。然后我将对此UINavigationController的引用传递给侧栏菜单,该菜单只是UIView的子类,带有UITableView,这是加载UIViewControllers的地方。当用户选择一行时,我分配/初始化视图控制器。因此,当新的UIViewController被推入堆栈时,它将被推送到内容视图中的UINavigationController。