nib loader 只保留 nib 中的第一个*** UIView?

Posted

技术标签:

【中文标题】nib loader 只保留 nib 中的第一个*** UIView?【英文标题】:Only the first top level UIView in nib is retained by nib loader? 【发布时间】:2012-11-13 14:35:35 【问题描述】:

我在启用 ARC 的项目中有一个 nib,它在顶层包含两个 UIViews。一个是主视图,连接到 nib 所有者中的属性view,像往常一样,作为弱引用。

第二个***UIView 连接到文件所有者的另一个属性。如果我将该属性也定义为weak,系统似乎会立即解除分配它——因此,nib 加载器似乎只保留了 nib 文件中的第一个和主要的UIView。这是正确的吗?如果是,是否有任何文件可以支持?我一直在寻找确认,但在 Apple 文档或 Stack Overflow 上的任何地方都找不到它。

我正在运行 Xcode 4.5.2。

【问题讨论】:

【参考方案1】:

我不认为 nib 加载机制对任何对象有任何特殊作用。它遵循定义的任何连接的属性规范。例如,UIViewControllerview 属性表示:

@property(nonatomic, retain) UIView *view

nib documentation 说,“出口通常应该是弱的,除了从文件所有者到 nib 文件中的***对象(或者,在 ios 中,故事板场景)应该是强的." 我相信现在这对于 OS X 和 iOS 来说都是一致的。

正如我所读的,这意味着您负责创建一个强大的属性来引用尚未由框架处理的任何***对象。

【讨论】:

谢谢菲利普,好信息!只是没想到 UIViewController 中的 view 属性被保留了。 当然,所有非***项目都是由其父组件持有的性质保留的,因此可能很弱。

以上是关于nib loader 只保留 nib 中的第一个*** UIView?的主要内容,如果未能解决你的问题,请参考以下文章

Nib 创建的视图保留文件的所有者防止 UIViewController 的释放

在 nib 文件中使用安全区域布局,但将部署目标保留为 iOS 8

iOS:加载没有 nib 文件的第二个视图控制器

在 nib 文件中创建类的实例

Nib 文件中的静态单元格未显示

UINib (iOS):可以从一个 nib 文件中实例化多个视图吗?