1

[super methodName]を使用して、これが両方の方法で行われるのを見てきました。メソッドの最初の行および最後の行として。これを行うための最良の方法はありますか?

例えば:

- (void)viewDidLoad {

    [super viewDidLoad];
    self.intX = 1;
}

- (void)viewDidLoad {

    self.intX = 1;
    [super viewDidLoad];

}

- (void)dealloc {

    [myControl release];
    [super dealloc];
}
4

2 に答える 2

2

一般に、ビューを処理するときは、サブクラスが行う変更に関連する標準の動作を考慮に入れる必要があります。

これはで最もよく示されています

- (void)drawRect:(NSRect)dirtyRect

事実上、ビューを四角形に描画していますが、ビュー自体もそこですべてのハイライトとサブビューの管理を行っています。

それで、あなたはスーパークラスがそれが通常の振る舞いをする前または後に起こる何かをする必要がありますか?

このような場合は、スーパーコールの前後にコードを移動してテストするのが最適です。また、スーパーコールを行わずに、実行内容にどのように影響するかを確認することで、動作をある程度理解できる場合もあります。

viewDidLoadはイニシャライザーであり、通常、実際のクラス自体よりもサブクラス化されたivarに関連性があります。ただし、サブクラス化viewDidLoadがサブクラス化されたビューのivarまたは状態に影響を与えている場合。変更が吹き飛ばされないように、スーパーが終了するまで待ちたいと思うでしょう。

于 2011-03-22T17:17:02.890 に答える
0

スーパークラスをリリースする前に子クラスオブジェクトをクリーンアップする必要があるため、最後に呼び出します。そうしないと、それらは孤立しますdealloc[super methodName];

例えば:

この例について考えてみてください。それはあなたにとって意味がありますか?

あなたは良い教育を受けるためにあなたのお父さんのお金を使うでしょう、そしてあなたは稼ぎ始めます(あなたの質問では、あなたがあなた自身のサブクラスを作る前にスーパークラスの利益を得ます)。あなたの悪い時期には、最初にあなたはあなたのお金を失い、ゆっくりとあなたはあなたのお父さんのお金も使い果たすかもしれません(deallocメソッドでは、サブクラスのオブジェクトを解放し、次にスーパークラスを解放します)。

于 2011-03-22T17:23:49.703 に答える