小さなプロジェクトに取り組んでいるうちに、自分のUIView
サブクラスのいずれかでdrawRect:
を介してカスタム描画を行う必要があることがわかりました。 drawRect:
サブタイトルUIView
のサブクラスのデフォルトの背景色が透明から黒に変更されたことに気付きました(デフォルトの背景色は、backgroundColor
プロパティがnilのときにビューが描画する色を表します)。drawRect:
またはdrawRect:
ただ単に[super drawRect:]
を呼び出しただけです。サブクラスがメソッドをオーバーロードしているかどうかを知ることができますか?
backgroundColor
を0以外の値に設定すると、drawRect:
がオーバーライドされているかどうかにかかわらず、これは実際問題ではありません。しかし、UIView
がdrawRect:
がサブクラスによってオーバーライドされているかどうかを知る方法を考え始めました。私は、Objective-Cがクラスやそのスーパークラスでも特定のセレクタに応答するかどうかを判断する機能を提供することを知っています。しかし、どのようにしてスーパークラスは、そのサブクラスがそのメソッドの1つをオーバーライドしているかどうかを知ることができますか?このタイプのイントロスペクションが本当に不可能な場合、私の例では何が起こっているのでしょうか?
はい、驚くべきことに、動作はsuperへの単純な呼び出しでも持続します。私は、クラスのメソッドを取得するために使用される関数は、スーパークラスのメソッドも考慮に入れていると考えていたため、obj-cランタイムの可能性は無視されました(したがって、常にdrawRect:presentが存在します)。しかし、class_copyMethodList (...、...)関数(と多分?)は、スーパークラスのメソッドを除外しているように見えるので、UIViewがdrawRectを探すためにそのリストを反復できると仮定します。私はそれが本当に起こっているかどうかという疑問があると思います。入力いただきありがとうございます。 – Sam