2008-10-18 [長年日記]
_ ObjectiveC2.0読書会第5回
参加してきたので私的メモをこちらにもメモメモ。
あとで読みかえそう。
考えながら読みながらメモったので品質はイマイチです。
今回はChapter8-10,AppendixB。
コーディング規約に慣れるのは時間かかりそう。
---
■Chapter8
NSData:バイナリなデータを扱う時に使う。Cのunsigned char[] とかに相当。なにものかわからなくても大きなデータを格納するのに使う。最適化がうまくできてるらしい。
不変なクラス:マルチスレッドのときにリエントラントに扱えるというメリットもある。不変なクラスを扱っているときはロックをかけなくてよいらしい。
■Chapter9
カテゴリ:あるクラスの一部分を実現するモジュール。クラスの実装を複数の場所に書くときなどに使う。カテゴリにはインスタンス変数は宣言できない。カテゴリのメソッド実装には「クラス名+カテゴリ名.m/h」を使うのが普通。
プライベートメソッド:誤って上書きしないようにするために、Appleの推奨は接頭語をつけること。(付録B)
クラスエクステンション:メソッド実装忘れを防ぐための仕組み
既存クラスへカテゴリを追加できる。新しいインスタンス変数は追加できないが、メソッドは追加できる。
継承とカテゴリの使い分け
継承:インスタンス変数を追加できる。superのメソッドも呼べる。
カテゴリ:新規メソッドだけ追加すればいいので楽。既存メソッドを上書きできる。が、注意して使うべき。
■Chapter10
抽象クラス:インスタンスを生成せず、サブクラスのインターフェースを宣言するするもの。ただし、普通のクラスと区別する言語上の特別な仕組みは無い。
クラスクラスタ:パブリッククラス(看板となる名前を持ってるクラス。NSStringとかNSSetとか。)を使っていると、実は内部では違うクラスのインスタンスが作って使われていて、よきにはからっていてくれる仕組み。NSStringとか、Foundationフレームワークでもよく使われている。
NSStringとかのサブクラスをダイレクトに作るとこの仕組みがあるのではまることがある。カテゴリの方が楽だなーと。
■AppendixB コーディングの指針
"Coding Guidelines for Cocoa"
綴りのルール:
- 2つめの単語から先頭文字を大文字にする(ラクダ)
接頭語:
- NS:Foundation, Applicationフレームワーク
- CF: CoreFoudation
- IB: Interface Builder
- CI :Core Image
- Web:WebKit
- _:Apple予約接頭語
名前に使う単語:
- 省略は避けよう
- 迷ったらCocoaAPIをまねる
- 複数オブジェクト返すときは複数形にしてあげると親切
プロトコル名にはingを付ける
カテゴリ名
「クラス名+カテゴリ名.m」
メソッド名:
値をとる場合はgetつけない
get始まりの場合、メモリをコピーしてそこに書き込んだ結果を得るメソッド
真偽値はis始まり
同じ機能の場合は親クラスと同じメソッド名にしておくとポリモフィズムが使えて便利
- 例外名:末尾にExceptionを付ける
- エラー名:末尾にErrorを付ける
- これから起きる:Will+動詞原型
- 起きた:Did+動詞原型
- 〜してもよいか?:Shoud+動詞原型
- グローバルユニーク名:URLの逆順
-- 例) com.apple.iPhoto
■Chapter11 プロトコル
プロトコル:メソッド宣言の集合、ダックタイピングに便利そう。
プロトコルに適合している:あるプロトコルを採用し、メソッドを全て実装している
@interface クラス名 : スーパークラス名 <プロトコル名>
プロトコルに適合している
id <S> obj;
conformsToProtocolメソッドでオブジェクトがプロトコルに適合しているか分かる。
非形式プロトコル:カテゴリの宣言だけで実装無し→実装がなくてもコンパイル可能、メッセージ送信時に実行時エラー。デリゲートでよく使われるらしい。
オプション付きのプロトコル(@required, @optional)が ObjC2.0 から使えるようになったので、そっちを使ってもいい。