1

如今,似乎 50% 的 iPhone 应用程序都在使用类似 Facebook 的滑动菜单。我还使用 ViewDeck 库 (https://github.com/Inferis/ViewDeck) 使用此 UI 创建了一些应用程序。左视图是一个 UITableView,点击一个项目会改变中心视图。

不过,我一直在为良好的“菜单管理”而苦苦挣扎。你创建一个包含所有视图控制器的 NSArray 吗?一次懒加载一个更好吗?你如何处理记忆?不太确定在保持内存使用率尽可能低的同时最好的方法是什么。

当我查看这些滑动菜单库时,从来没有一个完整的示例应用程序具有工作菜单和多个控制器。就像我说的,我已经使用 ViewDeck 创建了几个应用程序,但是视图控制器的实际更改总是感觉笨拙且根本不是最佳的(包含所有实例化视图控制器的数组)。

4

3 回答 3

3

我将 Array 用于视图控制器而不是视图。当用户选择指向该视图控制器的单元格时,将加载视图。所以它是延迟加载。如果你认为你需要小心内存,那么在内存警告时你可以释放你现在不需要的视图控制器。

当然,这取决于您在该控制器中有什么,但通常(标准 UI)您不需要释放它们。我从来不需要。

于 2013-01-08T14:26:14.550 回答
1

首先,请注意我从未使用过 Facebook 应用程序或 ViewDeck,根据演示视频很清楚该库的用途。

我可以建议你寻找不同的模式,例如有一本书Pro Objective-C Design Patterns for iOS,它描述了一个非常简单的中介模式,它基本上是控制器的控制器。

内存管理完全取决于任务,我看不出有任何理由一次初始化所有视图控制器,因为它们的视图可能会在不显示的情况下被加载。此外,视图并不总是控制器中最消耗资源的部分。这种方法需要非常严格和仔细的控制器开发,您还必须使它们可重用,这并不容易。

相反,我会尝试使其尽可能灵活和简单:一组使用的视图控制器,下一个被加载并按需添加。它应该与UINavigationController控制器堆栈非常相似。UINavigationController本身就是一个很好的研究样本,你不会有源代码,但你会拥有所有的标题,并且内部逻辑并不难。

于 2013-01-08T14:54:27.800 回答
0

我所做的是创建了一个容器视图控制器,侧边栏菜单位于视图底部,这意味着它不可见。最重要的是,我有一个 contentView(它只是一个 UIView),我有一个 UINavigationController,它管理 UIViewControllers,导航栏设置为隐藏。然后我将对该 UINavigationController 的引用传递给侧边栏菜单,它只是带有 UITableView 的 UIView 的子类,这就是加载 UIViewController 的地方。当用户选择一行时,我分配/初始化视图控制器。因此,当新的 UIViewController 被推送到堆栈上时,它会被推送到内容视图中的 UINavigationController 上。

于 2013-06-06T19:24:26.977 回答