1

私はiPhoneのプログラミングを学んでいて、絵を描きたいと思っていました。私はいくつかのサンプルコードに従い、viewcontrollerをサブクラス化しましたが、正常に機能しました。プログラムを拡張したかったので、少し助けを借りることができる設計上の質問に出くわしました。

myviewcontrollerをmynewviewでサブクラス化します。myviewcontrollerにコードがある場合、mynewviewでそれを呼び出すまたは参照するにはどうすればよいですか?その逆も同様です。この権利を求めているかどうかはわかりませんが、クラスとサブクラスの関係を理解し​​ようとしています。

4

2 に答える 2

0

Objective-C のメッセージング システムは動的です。すべてのオブジェクトにはstruct、ランタイムがイントロスペクションに使用する情報が含まれています。ここでランタイムは、オブジェクトが応答できるメソッドのリストを見つけます。たとえば、次のようにインスタンスにメッセージを送信するとします。

[mynewview someMethod];

ランタイムは、最初にオブジェクト情報をチェックして、メッセージに応答できるメソッドを見つけようとします。何も見つからない場合は、スーパー クラスをクエリします。実際、ランタイムははるかに複雑で、オブジェクトに応答する機会を与えます (これが動的な部分です。たとえば、mynewviewメソッドが呼び出されていなくてもsomeMethod、呼び出しを満たすことができるかもしれませんが、それはあなたができることです)今は心配したくない)。

子クラスから、指定されたメソッドのスーパークラスの実装をキーボードで呼び出すことができます。そのため、サブクラスであるsuper場合は、次の方法で実装を呼び出すことができます。mynewviewmyviewcontrollermyviewcontrollermynewview

[super someMethod]; 

がとsomeMethodの両方に存在する場合、ランタイムは自動的に子実装のみを呼び出します。(必要な場合) 子実装から親実装を呼び出す必要があります。myviewcontrollermynewview

于 2012-10-10T03:38:24.003 に答える
0

Objective-C オブジェクトは継承の恩恵を受けます。すべてのクラスは NSObject のサブクラスであるため、任意のオブジェクトで init を呼び出すことができます。カスタム クラスを作成してメソッド doSomethingAwesome を指定した場合は、カスタム クラスの任意のサブクラスに自由に doSomethingAwesome を実装できます。ただし、サブクラスでメソッドを宣言しても、そのメソッドはスーパークラスに追加されません。余談ですが、サブクラスで独自のカスタム クラスを歌っていることはめったにありません。いわゆる浅いオブジェクト階層を維持することが奨励されていると思います。通常、ストック ココア クラスをサブクラス化し、必要に応じてカスタマイズします。複数のサブクラスでカスタム メソッドが必要な場合は、継承に依存してカスタム動作を提供するのではなく、スーパークラスでカテゴリを宣言します。

于 2012-10-10T03:12:01.340 に答える