Objective-C

デリゲート

あるオブジェクトAが処理できないメッセージを受け取った際に別のオブジェクトBに処理を代行してもらう機構。表面上はオブジェクトAが実行しているように見える。 あるオブジェクトをデリゲートとして機能させたい場合は、そのクラスのインタフェース部でデ…

ブロックオブジェクト

関数を変数のように扱える機能。 /* int型の引数が1つで戻り値がvoidのブロックオブジェクト */ void (^b)(int) = ^(int i){ printf("%d\n", i); } ブロックオブジェクトでローカル変数を参照する場合 下記コードを実行すると、 1回目の関数f実行時:glb=30,…

クラスクラスタ

プリミティブメソッド NSStringの場合、lengthとcharacterAtIndexがプリミティブメソッドである。それ以外のNSStringのメソッドは、これら2つのメソッドを介して文字列にアクセスする。そのため、NSStringのサブクラスを作成してこれらのメソッドを再定義す…

高速列挙

使い方 NSArray arに格納されているオブジェクトに順番にアクセスする構文for...inの使い方。 配列に格納されているオブジェクトのリファレンスカウンタを順次表示するプログラム。 id obj; for(obj in ar){ printf("ar %d\n", [obj retainCount]); } 使用上…

配列オブジェクト

カウンタ管理方式を使用する場合のオーナーシップについて。 配列オブジェクトは、格納されたオブジェクトにretainメッセージを送って保持し、配列オブジェクトが解放される際には配列に格納されているすべてのオブジェクトにreleaseメッセージが送信される…

コンビニエンスコンストラクタ

コンビニエンスコンストラクタがいまいち理解しにくいので、現時点での理解をまとめてみる。 コンビニエンスコンストラクタは、クラスの(一時的な)インスタンス(実体)を生成して初期化する イニシャライザはインスタンスの生成は行わない 一時的なインス…

ガーベジコレクション

ガーベジコレクションを使用するには、 コンパイルオプション-fobjc-gc-onlyを有効にする メソッド実行中だけ使うオブジェクトはメソッド内の自動変数に代入して使用する しばらく使うオブジェクトは外部変数から参照できる経路を確保する 回収対象となるの…

オンライン資料

iOS Developer Library http://developer.apple.com/library/ios/navigation/ Introduction to Coding Guidelines for Cocoa http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html Google Objec…

動的なオブジェクト管理

リファレンスカウンタ リファレンスカウンタとは、インスタンスが何カ所から参照されているかを示すカウンタである。 allocで生成後にイニシャライザで初期化されたインスタンスのリファレンスカウンタは1になる。リファレンスカウンタはretainで1増加し、re…

サブクラスの初期化について

サブクラスの初期設定は、まずスーパークラスに初期化を依頼し、その後サブクラス特有の初期化を行う。 /* 初期化メソッド */ -(id) init{ self = [super init]; /* スーパークラスの初期化を実行 */ if(self != nil){ param_sub = 0; /* サブクラス特有の変…