グルマンでモーニング
2015年3月29日日曜日
2015年3月20日金曜日
2012年10月11日木曜日
declared property 実践
・アクセサの命名
@property (getter=isEnabled, setter=makeEnable:) BOOL enabled;
setter名はコロン(:)を忘れずに。
・unwritable(と勝手に名付けた)
@property (readonly) NSString* firstName;
setterを作らないので呼べません。
・書き込み可能なオブジェクトの保持(ガベージコレクションの有無で変わる)
・GC無効の場合、オブジェクトのオーナーシップをどうすべきか、気にしなくてはいけない。retainを呼んでそのオブジェクトを保持するか、または単に参照を持つだけか。copyは指定されたオブジェクトをコピーして保持すると。
//GCなし
@property (retain) NSString* title;
@property (assign) id delegate;
@property (copy) NSString* value;
ガベージコレクション無効の場合はいずれかの指定子を宣言しないとけないと。
ガベージコレクション有効な場合、無指定ではassignとなる。assignかcopyかは明示しておいたほうが無難と。
@property (getter=isEnabled, setter=makeEnable:) BOOL enabled;
setter名はコロン(:)を忘れずに。
・unwritable(と勝手に名付けた)
@property (readonly) NSString* firstName;
setterを作らないので呼べません。
・書き込み可能なオブジェクトの保持(ガベージコレクションの有無で変わる)
・GC無効の場合、オブジェクトのオーナーシップをどうすべきか、気にしなくてはいけない。retainを呼んでそのオブジェクトを保持するか、または単に参照を持つだけか。copyは指定されたオブジェクトをコピーして保持すると。
//GCなし
@property (retain) NSString* title;
@property (assign) id delegate;
@property (copy) NSString* value;
ガベージコレクション無効の場合はいずれかの指定子を宣言しないとけないと。
ガベージコレクション有効な場合、無指定ではassignとなる。assignかcopyかは明示しておいたほうが無難と。
declared property 小話
ドット構文とメソッド呼び出しの等価を考えた時、
・プロパティ名からメソッド名への変換規則は、キー値コーディングのものと同じになる。
→キー値コーディングが分かるまではおいておく。
・メソッドが本当に実装されているかどうかのチェックは、実行時に行うというのが原則
・id型クラスのメソッドは宣言しなくともコンパイルは通ってしまう。
・翻って、ドット演算子で記述するとチェックが入る。静的な型チェックが入り、プログラムミスが減ると。
その例示は以下。インスタンス変数nameはプロパティ宣言がなされていない。
アクセサ記述は省略できたが、そのかわり増える記述もあるのだ(上のキャストがその例)。
・プロパティ名からメソッド名への変換規則は、キー値コーディングのものと同じになる。
→キー値コーディングが分かるまではおいておく。
・メソッドが本当に実装されているかどうかのチェックは、実行時に行うというのが原則
・id型クラスのメソッドは宣言しなくともコンパイルは通ってしまう。
・翻って、ドット演算子で記述するとチェックが入る。静的な型チェックが入り、プログラムミスが減ると。
その例示は以下。インスタンス変数nameはプロパティ宣言がなされていない。
id person = [[Person alloc] init];
// id型のプロパティにアクセスする
// エラーになる
NSString* name = person.name;
// 存在しないプロパティにアクセスする
// エラーになる
NSString* lastName = ((Person*)person).lastName;
アクセサ記述は省略できたが、そのかわり増える記述もあるのだ(上のキャストがその例)。
登録:
投稿 (Atom)