在 XIB 文件中创建非视图对象的指南

Posted

技术标签:

【中文标题】在 XIB 文件中创建非视图对象的指南【英文标题】:Guidelines for creating non-view objects in a XIB file 【发布时间】:2009-07-15 14:57:59 【问题描述】:

Interface Builder 提供了在 XIB 文件中创建非视图/控制器对象的能力。过去,我曾使用此功能来实例化和连接管理 XIB 中的视图组件的小组件,这似乎是一件相当合理的事情。

但是,我想知道此功能还有哪些其他合法用途。它是一个相当有吸引力的工具,因为它有效地将实例化和注入此类对象的依赖关系的责任从代码中转移到框架中。

对于 Interface Builder,我很想知道使用 dependency injection 功能的指南是什么?

【问题讨论】:

【参考方案1】:

我使用的经验法则是,如果辅助对象与在 nib 中以某种方式定义的 UI 相关,则可以放入辅助对象 - 所以要么是保存对元素引用的代理对象,要么是被触发的动作。

代理方法在加载 nib 时都会被连接,并通过 userinfo 字典传入已经创建的对象,您可以选择与 nib 名称一起传入。

尽管我认为完全没有错,在一个纯粹的逻辑 nib 中,它会使用目标/动作系统来连接多个代理对象。这可能比在代码中进行所有布线更容易,尽管我还没有看到在实践中使用过。

【讨论】:

【参考方案2】:

没有指导方针,你靠自己。

在teabot 的评论后编辑:看,对我来说,仍然不清楚 nib 内存管理是如何真正起作用的。当我释放拥有 nib 的窗口控制器时,反序列化的对象真的会留下内存吗?

我想我在某处读到过,如果您在 nib 控件和窗口控制器之间使用绑定,则会出现泄漏,在某些情况下,我自己进入了 funny nib-related annoyances。

也很难追踪一些与 nib 相关的错误,例如错误的绑定键或缺少操作 IB 链接。

所以我更喜欢将 nib 内容保持在最低限度,通常是充分利用绑定(通常是数组控制器)所需的所有内容,但仅此而已。

[我想到了一个new question]

【讨论】:

您有什么想法吗?个人喜好? 有时所有 Nib 的顶部对象都会以某种方式保留。一开始我在一个 Nib 上持有许多视图然后执行 [[NSBundle loadNib...] objectAtIndex:X] 来获取其中一个时发生在我身上。不好的做法,但仍然以某种方式保留了其他人。

以上是关于在 XIB 文件中创建非视图对象的指南的主要内容,如果未能解决你的问题,请参考以下文章

许多子类的一个 XIB 视图

在 XCode 5 中创建新的“单一视图应用程序”时没有 .xib 文件

从 XIB 创建新的 UIView 对象

在 Xcode 中创建自定义 xib 视图大小

如何在表格视图单元格中添加 xib 文件?

NIB/XIB 中的 StackView 约束行为是不是不同?