1

我从某人那里听说类的状态在 -(id)init 内部还不稳定,因此不建议在 init 内部使用“self.something”,但是我有一个 UIView 子类需要在类被创建,所以我必须在 init 中使用 [self addSubview: subview],或者我必须有另一个初始化方法,并且在我创建视图之后使用:

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

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

谢谢!

4

1 回答 1

4

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

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

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

于 2012-08-08T02:22:57.270 回答