何时使用多个笔尖?
Posted
技术标签:
【中文标题】何时使用多个笔尖?【英文标题】:When to use multiple nibs? 【发布时间】:2011-06-27 12:08:36 【问题描述】:假设我的应用程序有 6 个窗口,1 个窗口是主窗口,另外 5 个窗口用于设置、分数、统计等。
所以如果我是正确的,由于内存管理,使用了多个笔尖? 因此,如果我将所有 6 个视图放在一个 nib 文件中,则在加载应用程序时,它将同时加载所有 6 个视图并占用大量内存,但如果我将 6 个 nib 用于 6 个视图,则在启动时应用程序将仅加载第一个视图,当我单击示例“选项”时,它将加载 Options.nib 并显示视图。
是否有更多理由使用多个 nib 而不是一个 nib 中的多个视图?
我说的对吗? 我怎么知道何时使用 addSubview 或 presentModalViewController? 当我使用这两种方法切换视图时,主要区别是什么?
【问题讨论】:
【参考方案1】:你对记忆的看法是对的。一个 nib 的所有视图同时加载到内存中。您可能一次不需要它们。因此,在这种情况下,您正在浪费内存。如果您有很多视图,这甚至会使应用程序崩溃。
添加单独的 nib 通常会导致代码更加结构化。设置和分数之间没有逻辑关系。因此,您应该为它们设置单独的类和 nib。如果您不这样做,您的代码可能无法管理,这将需要更多时间来维护和修改。
【讨论】:
【参考方案2】:Nib(或 XIB)文件几乎与内存管理无关。他们在那里是为了方便。与手动编码所有自动调整大小的蒙版和操作相比,使用可视化工具布置 UI 和连接操作更容易。但是,您是对的,您不想一次将所有视图加载到内存中,因为那样会浪费。
使用多个 XIB 文件有助于使您的项目更有条理。 (在某些情况下,您甚至可以为单个视图控制器使用备用 nib。尽管常见的情况是 1:1 的比例。)
addSubview
和 presentModalViewController
方法确实不同。 addSubview
获取视图并将其添加到给定视图(或将其置于最前面)。这意味着您将负责保留视图控制器,以免发生奇怪的事情。这将用于在您的主视图中显示其他视图,例如在横幅等中显示消息。
相比之下,presentModalViewController
用于在短时间内呈现单个视图,例如登录表单或信息屏幕。您将整个视图控制器零碎地传递,并且通常会在此后不久释放视图控制器。其实这样的代码很常见:
SomeViewControllerSubclass *myVC = [[SomeViewControllerSubclass alloc] initWithNibName:@"SomeViewControllerSubclass" bundle:nil];
[self presentViewController:myVC];
[myVC];
请注意我们如何在呈现SomeViewControllerSubclass
实例后立即释放它。你不能用addSubview
做到这一点,因为那样你可能会留下一个没有控制器的视图。你必须自己保留它。
【讨论】:
Whz 在他们使用的一些教程中:initWithNibName:nill 代替 initWithNibName:@"SomeViewControllerSubclass" 在这些情况下,他们可能是在代码中手动配置视图。以上是关于何时使用多个笔尖?的主要内容,如果未能解决你的问题,请参考以下文章