1

クラスの状態が-(id)init内でまだ安定していないと誰かから聞いたので、init内で'self.something'を使用することはお勧めしませんが、UIViewサブクラスがあり、クラスが作成されるので、initで[self addSubview:subview]を使用するか、別の初期化メソッドを使用して、次を使用してビューを作成する必要があります。

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

そのメソッドを呼び出す必要があります。これは正しいです?initWithFrameは、クラスがまだ安定していないというinitと同じ状況にありますか(allocの後に呼び出されます)?そうである場合、サブビューをどのように初期化する必要がありますか?

ありがとう!

4

1 に答える 1

4

selfで使用しても問題ありませんinit。脆弱性の 1 つのポイントは、setter メソッド[self setFoo:...]またはを使用する場合self.foo = ...、部分的に初期化された状態に対応していないクラスまたはサブクラスの setter ロジックをトリガーする可能性があることです。

[self addView:someView];問題はありません。ただし、インスタンス化からオフロードする代わりに、ビューの遅延ロードを検討することをお勧めします。後でリファクタリングしやすくなるかもしれません

ビューが常に他のビューを必要とする場合は、遅延ロードを試みる意味がないため、強調してください。

于 2012-08-08T02:22:57.270 に答える