ObjC:在init和/或initWithFrame中使用'self':

时间:2012-08-08 02:01:36

标签: objective-c class init alloc

我从某人那里听说类的状态还不稳定 - (id)init,所以在init中不建议使用'self.something',但我有一个需要添加一些子视图的UIView子类在创建类时本身,所以我必须在init中使用[self addSubview:subview],或者我必须使用另一个初始化方法,然后使用以下命令创建视图:

MyView *myView = [[MyView alloc] initWithFrame:frame];

我需要调用该方法。它是否正确? initWithFrame与init具有相同的情况,即该类还不稳定(因为它在alloc之后调用)?如果是,那么我应该如何初始化子视图?

谢谢!

1 个答案:

答案 0 :(得分:4)

self中使用init没有任何问题。脆弱性的一个方面是,如果您使用setter方法[self setFoo:...]self.foo = ...,那么您可能会触发类或子类中可能没有为部分初始化状态做好准备的任何setter逻辑。

[self addView:someView];不是问题。但是,可能想要考虑延迟加载视图而不是从实例化中卸载。 可能使以后更容易重构。

强调因为如果你的视图确实总是需要那些其他视图,那么尝试延迟加载是没有意义的。