何时使用多个笔尖?

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 的比例。)

addSubviewpresentModalViewController 方法确实不同。 addSubview 获取视图并将其添加到给定视图(或将其置于最前面)。这意味着您将负责保留视图控制器,以免发生奇怪的事情。这将用于在您的主视图中显示其他视图,例如在横幅等中显示消息。

相比之下,presentModalViewController 用于在短时间内呈现单个视图,例如登录表单或信息屏幕。您将整个视图控制器零碎地传递,并且通常会在此后不久释放视图控制器。其实这样的代码很常见:

SomeViewControllerSubclass *myVC = [[SomeViewControllerSubclass alloc] initWithNibName:@"SomeViewControllerSubclass" bundle:nil];
[self presentViewController:myVC];
[myVC];

请注意我们如何在呈现SomeViewControllerSubclass 实例后立即释放它。你不能用addSubview 做到这一点,因为那样你可能会留下一个没有控制器的视图。你必须自己保留它。

【讨论】:

Whz 在他们使用的一些教程中:initWithNibName:nill 代替 initWithNibName:@"SomeViewControllerSubclass" 在这些情况下,他们可能是在代码中手动配置视图。

以上是关于何时使用多个笔尖?的主要内容,如果未能解决你的问题,请参考以下文章

每个 UIViewController 有多个“笔尖”

带有多个笔尖的 UIScrollView 中未声明的视图

从笔尖加载的 UIView 未显示多个 UILabel

iCarousel 多个笔尖

单个笔尖的多个视图

单独的方向笔尖