我喜欢使用界面生成器来设计 ui 元素,但我正在设计一个屏幕,其中根据条件显示不同的子视图。对我来说更容易在单独的 nib 文件中设计这些子视图,然后在需要时将它们加载到视图控制器中。
例如,我有以下延迟加载的活动视图,它基本上是显示活动指示器的叠加层,我希望可以选择在不同的视图控制器中重用它。
这是其中一个视图控制器中的 getter 方法
- (ActivityView *)activityView
{
if (!activityView) {
activityView = [[[UINib nibWithNibName:@"ActivityView" bundle:nil]
instantiateWithOwner:self options:nil] lastObject];
}
return activityView;
}
在 nib 文件中,我没有将所有者设置为与视图控制器匹配,因为我希望多个视图控制器能够使用它,但是我将顶级视图链接到 ActivityView 类,以便我可以自定义它的一些 ui 编程方式。
这种方法似乎对我有用,但我想知道这是否是一种好方法?
在资源编程指南中它说:
重要提示:当您完成这些对象时,您有责任释放您加载的任何 nib 文件的顶级对象。不这样做是许多应用程序中内存泄漏的原因。释放顶级对象后,最好将指向 nib 文件中对象的所有 outlet 设置为 nil 来清除它们。您应该清除与所有 nib 文件对象关联的出口,而不仅仅是顶级对象。
如果我有 ARC,我不确定这是否仍然适用,我需要做什么?
这只是意味着我需要在 didReceiveMemoryWarning 方法中设置 self.activityView = nil 吗?