私は日常ではC#を使用していますので、C#使用者から見たObjective-Cの目新しい点についてメモしておきます。
ちなみに、参考書は掌田津耶乃著「Objective‐C 2.0徹底解説」です。
カテゴリ
クラスをいくつかのカテゴリに分け、それらを総合的にひとまとめにしてクラスを構成する機能です。メソッドを追加する定義のファイルにはクラス名(カテゴリ名)と記述します。
インスタンス変数はカテゴリに分けることができないのでC#で言うところのpartialクラスと言うよりは、拡張メソッドに近い感じでしょうか。
以下の例では、test.h/test.mに定義したtestクラスに対して、test+.h/test+.mでaddMethodメソッドを追加しています。カテゴリ名は任意で良いので、addとしています。
test.h
test.m
test+.h
test+.m
main.m
2011年5月29日日曜日
2011年5月2日月曜日
Objective-Cのメモ#1
私は日常ではC#を使用していますので、C#使用者から見たObjective-Cの目新しい点についてメモしておきます。
ちなみに、参考書は掌田津耶乃著「Objective‐C 2.0徹底解説」です。
オーバーロード
Objective-Cにはオーバーロードの機能はありません。
その代わり、キーワードを変えることによってオーバーロートと同じ事を実現できます。
クラス変数
Objective-Cにはクラス変数がありません。
・MyObject.h
・MyObject.m
・MyObject+add.h
・MyObject+add.m
・main.m
プロトコル
C#で言うところのインターフェースです。Objective-Cでは、@required以降は必ず実装しなければならない必須メソッド、@optional以降は実装しなくても良いオプショナルメソッドになります。
・ヘッダファイル
・実装ファイル
プロトコルを持っているか確認するには、NSObjectのconformsToProtocol:メソッドを使用します。conformsToProtocol:の戻り値がYESの場合、インスタンスは指定したプロトコルが実装されています。
また、下記の通り仮引数にプロトコルを指定すると、実引数が指定したプロトコルを実装しない場合は警告エラーとなります。
さらに、オプションメソッドの実装有無をチェックするには、NSObjectのrespondsToSelector:メソッドを使用します。
ちなみに、参考書は掌田津耶乃著「Objective‐C 2.0徹底解説」です。
オーバーロード
Objective-Cにはオーバーロードの機能はありません。
その代わり、キーワードを変えることによってオーバーロートと同じ事を実現できます。
クラス変数
Objective-Cにはクラス変数がありません。
グローバル変数を代用してクラス変数を実現するのが一般的なようです。
カテゴリ
1つのクラスをいくつかの部品の組み合わせとして構成するための仕組みです。
別ファイルにインスタンス変数を分離できないので、C#のpartialというより拡張メソッドのような存在でしょうか。
・MyObject.h
・MyObject.m
・MyObject+add.h
・MyObject+add.m
・main.m
プロトコル
C#で言うところのインターフェースです。Objective-Cでは、@required以降は必ず実装しなければならない必須メソッド、@optional以降は実装しなくても良いオプショナルメソッドになります。
・ヘッダファイル
・実装ファイル
プロトコルを持っているか確認するには、NSObjectのconformsToProtocol:メソッドを使用します。conformsToProtocol:の戻り値がYESの場合、インスタンスは指定したプロトコルが実装されています。
また、下記の通り仮引数にプロトコルを指定すると、実引数が指定したプロトコルを実装しない場合は警告エラーとなります。
さらに、オプションメソッドの実装有無をチェックするには、NSObjectのrespondsToSelector:メソッドを使用します。
登録:
投稿 (Atom)