初始化时,在视图控制器的loadview中调用IOS属性访问器是否可以?

时间:2013-01-26 19:40:50

标签: ios properties initialization

在我的项目中,我正在创建没有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:中初始化对象是正确的,我真的应该使用alloc / init的访问器吗?

有什么想法?

1 个答案:

答案 0 :(得分:0)

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

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

您不应该在loadView方法中执行此操作:

[self.view addSubView:self.mySubView];

这是因为您在调用创建它的方法中引用受控视图。 {1}}不是为您创建的,您必须在'loadView`方法中创建它。

相反,使用局部变量创建受控视图,然后在self.view方法的末尾将该局部变量分配给self.view