Objective-C 2.0プログラミング言語: クラス

公開日: : 最終更新日:2012/12/14 Objective-C

記事内に広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。

以下のドキュメントを読んでいる。

Objective-C 2.0プログラミング言語: クラス

コンパイラにより、クラスごとに1つだけアクセス可能なオブジェクトが作成されます。これがクラスオブジェクトで、そのクラスに属する新しいオブジェクトの構築方法を知っています(そのため、伝統的に「ファクトリオブジェクト」と呼ばれています)。

Objective-C 2.0プログラミング言語: クラス

ここら辺も、Rubyと同じような感じだなあ。


404 Page not found @ val it: α → α = fun

規則により、クラス名は大文字で始まり(「Rectangle」など)、インスタンス名は通常小文字で始まります(「myRect」など)。

Objective-C 2.0プログラミング言語: クラス

継承

Foundationフレームワークをベースにしたコードを書いている場合、そのルートクラスは一般的にNSObjectです。

Objective-C 2.0プログラミング言語: クラス

作成するすべてのクラスは、(新しいルートクラスを定義しないかぎり)別のクラスのサブクラスである必要があります。

Objective-C 2.0プログラミング言語: クラス

NSObjectクラス

NSObjectはルートクラスなので、スーパークラスはありません。Objective-Cオブジェクトとオブジェクトの対話の基本的フレームワークは、NSObjectで定義されています。

Objective-C 2.0プログラミング言語: クラス

特別な動作を別のクラスから継承する必要のないクラスでも、NSObjectクラスのサブクラスにするべきです。

Objective-C 2.0プログラミング言語: クラス

Rubyって、ここら辺に関しては選択の余地はないんだっけ??

インスタンス変数の継承

NSObjectクラスで定義された isaインスタンス変数は、あらゆるオブジェクトの一部になります。

Objective-C 2.0プログラミング言語: クラス

ここら辺についてはC++とかと同じみたい。

メソッドの継承

クラスオブジェクトも、階層で上位にあるクラスを継承します。ただし、クラスオブジェクトはインスタンス変数を持たないため(インスタンスだけが持ちます)、メソッドだけを継承します。

Objective-C 2.0プログラミング言語: クラス

メソッドのオーバーライド

メソッドをオーバーライドするとオリジナルを継承できなくなりますが、新しいクラスで定義された他のメソッドは、再定義されたメソッドをスキップして、オリジナルを見つけることができます

Objective-C 2.0プログラミング言語: クラス

また、再定義したメソッドには、オーバーライド対象メソッドを組み込むことができます。この場合、新しいメソッドはオーバーライド対象メソッドを完全に置き換えるのではなく、改良または変更するにすぎません。

Objective-C 2.0プログラミング言語: クラス

ここら辺も、C++/Javaあたりと同じようだ。

抽象クラス

NSObjectクラスは抽象クラスの典型的な例です。プログラムは多くの場合、NSObjectのサブクラスを定義して、そのサブクラスに属するインスタンスを使用しますが、NSObjectクラスに直接属するインスタンスを使用することはありません。

Objective-C 2.0プログラミング言語: クラス

クラスの型

sizeof演算子の引数などのように、C言語において型指定子を指定できる場所ならば、クラス名をソースコードに記述できます。

Objective-C 2.0プログラミング言語: クラス


int i = sizeof(Rectangle);

静的な型定義

idの代わりにクラス名を使用して、オブジェクトの型を指定することができます。

Objective-C 2.0プログラミング言語: クラス


Rectangle *myRect;

静的な型定義はポインタを明示的なものにし、idはポインタを隠蔽します。

Objective-C 2.0プログラミング言語: クラス

C++と同様に、以下のような記述も可能みたい。


Graphic *myRect;

型のイントロスペクション

isMemberOfClass:メソッドはNSObjectクラスで定義されており、レシーバが特定のクラスのインスタンスかどうかをチェックします。

Objective-C 2.0プログラミング言語: クラス


if ( [anObject isMemberOfClass:someClass] )
...

isKindOfClass:メソッドもNSObjectクラスで定義されており、レシーバが特定のクラスを継承しているどうか、すなわちそのクラスのメンバかどうか(指定のクラスがレシーバに継承パスにあるかどうか)をチェックします。

Objective-C 2.0プログラミング言語: クラス


if ( [anObject isKindOfClass:someClass] )
...

今日はここまで。続きはまた今度。

関連記事

サンフランシスコのピア39にあるチャウダーズでクラムチャウダーを食す!

lolipop アップルの開発者向けイベント「WWDC2014」

ミスドのカルピスドーナツとカルピスポンデリングを食べてみた!

ミスドで期間限定のカルピスコラボ商品「カルピスドーナツ」と「カルピ

十三カレー計画で牛すじカレーネギのせを食す!(大阪・十三)

「iPhoneアプリ開発キャンプ@大阪」のランチで、十三カレー計画

大阪・難波の加寿屋 法善寺でかすうどんを食す。ランチタイムはおにぎり2個まで無料!

大阪・難波の加寿屋 法善寺 (かすうどん KASUYA)で、かす

ライブドアブログで運営していた「あきお商店」を「卵は世界である」に改名しました

少し前からライブドアブログで「あきお商店」というブログをやって

→もっと見る

PAGE TOP ↑