假设我的应用程序有6个窗口,1个窗口是主窗口,其他5个用于设置,分数,统计等。
所以如果我是正确的,因为记忆管理会使用多个笔尖? 因此,如果我将所有6个视图放在一个nib文件中,当加载应用程序时,它将同时加载所有6个视图并占用大量内存,但如果我使用6个nibs进行6个视图,则在启动时应用程序将仅加载第一个视图,当我点击“选项”时,它会加载Options.nib并显示视图。
是否有更多理由在一个笔尖中使用多个笔尖而不是多个视图?
我是对的吗? 我怎么知道何时使用addSubview或presentModalViewController? 当我使用这两种方法切换视图时,主要区别是什么?
答案 0 :(得分:1)
你对记忆是正确的。笔尖的所有视图都同时加载到内存中。你可能不会立刻需要它们。所以在那种情况下你浪费了记忆力。如果你有很多观点,这甚至会导致应用程序崩溃。
通常添加单独的nib会产生更结构化的代码。设置和分数之间没有逻辑关系。所以你应该有它们的单独的类和笔尖。如果您不这样做,您可能会有一个难以管理的代码,需要更多的时间来维护和修改。
答案 1 :(得分:1)
Nib(或XIB)文件几乎与内存管理无关。它们是为了方便起见。使用可视化工具布置UI和连接操作比手动编码所有自动调整蒙版和操作更容易。但是,你是对的,你不想一次性将所有视图加载到内存中,因为这会浪费。
使用多个XIB文件对于保持项目结构更加有用。 (在某些情况下,您甚至可能为单个视图控制器设置备用笔尖。虽然常见情况是1:1的比例。)
addSubview
和presentModalViewController
方法确实不同。 addSubview
获取视图并将其添加到给定视图(或将其带到最前端)。这意味着您将负责保留视图控制器,以便不会发生奇怪的事情。这将用于在主视图中显示其他视图,例如在横幅中显示消息等。
相比之下,presentModalViewController
用于在短时间内呈现单个视图,例如登录表单或信息屏幕。您将零碎地传递整个视图控制器,并且此后不久将释放视图控制器。事实上,看到这样的代码是很常见的:
SomeViewControllerSubclass *myVC = [[SomeViewControllerSubclass alloc] initWithNibName:@"SomeViewControllerSubclass" bundle:nil];
[self presentViewController:myVC];
[myVC];
注意我们如何在呈现SomeViewControllerSubclass
之后立即释放它。你不能用addSubview
做到这一点,因为那时你可能会留下没有它的控制器的视图。你必须自己保留它。