何时使用多个nib文件?

3
假设我的应用程序有6个窗口,其中1个窗口是主窗口,其他5个窗口用于设置、得分、统计等等。
那么,如果我理解正确的话,使用多个nib文件是因为内存管理的原因吗?如果我将所有6个视图放在一个nib文件中,当加载应用程序时,它将同时加载所有6个视图,并占用大量内存。但是,如果我使用6个nib文件分别对应6个视图,则在启动应用程序时只会加载第一个视图,当我点击例如“选项”时,它将加载Options.nib并显示该视图。
除了将多个视图放在一个nib文件中,还有其他使用多个nib文件的原因吗?
我的理解正确吗?我如何知道何时使用addSubview或presentModalViewController?使用这两种方法切换视图的主要区别是什么?
2个回答

1

Nib(或XIB)文件与内存管理几乎没有任何关系。它们存在是为了方便。使用可视化工具布局UI和连接操作比手动编写所有自动调整掩码和操作更容易。但是,您是正确的,您不希望一次将所有视图加载到内存中,因为那将是浪费

使用多个XIB文件有助于保持项目更加结构化。(在某些情况下,您甚至可能为单个视图控制器拥有备用nibs。尽管常见情况是1:1比率。)

addSubviewpresentModalViewController方法真的很不同。addSubview接受一个视图并将其添加到给定视图中(或将其置于前台)。这意味着您需要负责保留视图控制器,以避免发生奇怪的事情。这将用于在主视图中呈现其他视图,例如在横幅中呈现消息等。

相比之下,presentModalViewController 用于短时间内呈现单个视图,例如登录表单或信息屏幕。您逐个传入整个视图控制器,并且通常会在不久之后释放视图控制器。实际上,经常看到这样的代码:
SomeViewControllerSubclass *myVC = [[SomeViewControllerSubclass alloc] initWithNibName:@"SomeViewControllerSubclass" bundle:nil];
[self presentViewController:myVC];
[myVC];

请注意,我们在呈现 SomeViewControllerSubclass 实例后立即释放它。您不能使用 addSubview 进行这样的操作,因为这样可能会导致视图没有其控制器。您必须自己保留它。

为什么在一些教程中,他们使用:initWithNibName:nil,而不是使用:initWithNibName:@"SomeViewControllerSubclass"? - vburojevic
在这些情况下,他们可能会手动在代码中配置视图。 - Moshe

1
  1. 关于内存,你是正确的。nib 的所有视图都会同时加载到内存中。你可能不需要它们全部一次性加载。因此,在这种情况下,你会浪费内存。如果你有很多视图,这甚至可能导致应用程序崩溃。

  2. 通常将单独的 nib 添加到代码中可以使代码更加结构化。设置和分数之间没有逻辑关系。因此,你应该为它们拥有单独的类和 nib。如果你不这样做,你可能会得到一个难以管理、需要更多时间来维护和修改的代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接