Objective-Cなまとめ


プロパティ

インスタンス変数にセッター・ゲッターメソッドを持たせるもの。”@property (扱い)インスタンス変数名”で、プロパティを定義し、”@synthesize インスタンス変数名”で実装する。使い方はmyClass.sizeのように使う。Javaをかじったことのある僕が見ると、プロパティっていかにも非カプセル化みたいに見えるけど実際にはカプセル化の代表的な手段らしい。(扱いの部分があるからかな?)尚、必ずしも@synthesizeで実装する必要は無いみたい。

プロトコル

Javaで言うインターフェースのこと。Objective-Cで多重継承が許可されないのも、プロトコルがあるためかな。C++で多重継承が許されると知ったとき、「怖いなあ」と思っていたが、なんで怖いのかは忘れた。

たしか、インターフェースはインスタンス変数の持たない、メソッドだけを引き継ぐ(それも、実装されていない)ものだった気がする。同じスーパークラスを継承しなくても、同様の機能を持たせることができる。(メソッドは実装されていないので、本当に同様の機能を持たせるのかはプログラマ次第かと思う。同じメソッドを持っているんだよとわかりやすくするために、プロトコルがあると思えば良い。)Javaのインターフェースとの相違は、プロトコルに定義されたメソッドを参照するとき、必須なのか必須でないかを見分けること。つまり、必ず書かなくてはいけないメソッドとオプションメソッドがあるってこと?かと思う。

定義は、”@protocol プロトコル名”のあとにメソッドを定義、プロトコル実装が必須であるメソッドは”@required”のあとに、メソッドを定義する。

カテゴリ

スーパークラスの機能を追加すること。継承と違い、スーパークラスには何ら影響を与えないし、再コンパイルする必要も無い。ただ、機能を追加しただけ。

id

データ型で、何でも受け付けるよーというときに使う。例えば、+(id)allocを宣言しておけば、そのメソッドを使うオブジェクトのデータ型に関わらず、使うことができる。

デリゲート

メソッドをオブジェクトみたいに使う?よくわからん。

ポリモーフィズム

この継承を行なう際に、上位のクラス関数を新しい関数の定義で置き換えることを「オーバーライド」と呼び、クラスによって同一のメソッドで異なる処理が行われる性質をポリモーフィズムという。出展:IT用語辞典

具体的な機能ではなく、多様性っていう言葉そのものみたい。

  1. No comments yet.
(will not be published)