-1

在我的项目中,我正在创建没有 IB 的 UIViewControllers,因此没有 nib 文件,因此所有可见或其他的控制器内容都是在loadView:中以编程方式创建的。因此,我本质上是在loadView:中“初始化”我的所有对象。这是正确的做法吗?或者我应该把我所有的初始化都放在initWithNibName:bundle:中吗?

因为它是我在控制器的loadView 中创建我的 UIView 子视图的实例:像这样:

self.mySubView =  [[SubView alloc] initWithFrame:aframe];
[self.view addSubView:self.mySubView];
[self.mySubView release];

所以我正在使用合成属性来实例化其中的几个子视图。由于我不在初始化程序中,因此我通过调用它们的访问器来创建这些视图,如上所述。但是,它确实感觉这本质上是初始化代码,所以也许我应该直接在我的 ivars 上调用 alloc/init,而不是通过访问器,这让我认为我应该在initWithNibName:bundle:中执行此操作。

如果我在loadView:中初始化对象是正确的,我真的应该使用访问器来分配/初始化吗?

有什么想法吗?

4

1 回答 1

0

initWithNibName:bundle:调用时(这里我假设您没有使用 nib 文件),您的视图控制器的受控视图尚未创建。它在第一次self.view被引用时被创建。最好不要在 init 方法中执行此操作。因此,最好不要在 init 方法中创建子视图。

第一次self.view以任何方式引用,该loadView方法由视图控制器自动调用。此时以编程方式创建受控视图是您的工作。在该loadView方法中创建您的子视图是完全可以的,如果您遵循我建议的良好做法,您将需要这样做。但是您应该只self.viewloadView方法中引用以将受控视图分配给它,这意味着您应该在方法中只引用它一次loadView

您不应该在loadView方法中这样做:

[self.view addSubView:self.mySubView];

这是因为您在调用创建它的方法中引用受控视图。self.view不是为您创建的,您必须在“loadView”方法中创建它。

相反,使用局部变量来创建受控视图,然后在方法self.view结束时将该局部变量分配给loadView

于 2013-01-26T20:08:02.837 回答