C++やJavaからObjective-Cを使うにあたって間違いやすい点や異なる点です。
同じオブジェクト指向言語といっても、言語によって慣習や考え方はかなり異なることがあります。
他の言語の慣習や考え方を持ち込むのは可読性を損ねるだけでなく、一貫性も損ねることとなるので言語の考え方や慣習はきちんと学ぶべきだと思います。
インスタンス変数はデフォルトはprotected
メソッドはすべてpublic
Objective-C 2.0(iOS)であればクラスエクステンションを使うことで、ヘッダーファイルのほうにプロトタイプ宣言をしなくて済むのとクラスエクステンションを見るとどれがprivateメソッドなのか判定することができます。
privateメソッドに接頭語を付けて見分けるというのも合わせて使ったほうがいいかもしれません。
Extensions(The Objective-C Programming Language)
propertyのデフォルトはatomic
initでインスタンス変数はすべて0で初期化される
nilのオブジェクトにメッセージを送っても無視されるだけでクラッシュはしない
Sending message to nil(The Objective-C Programming Language)
BOOLのYESは1とは限らないので、if文内での判定には使わないようにする。
NSString,NSColor,NSURLはretainではなくcopyを使う
copyとして保持したり返したりするので不変であることが保証できるからのようです。
Value Objects and Copying(Memory Management Programming Guide)
string = value;とself.string = value;は別物
全者は単なる代入ですが、後者はpropertyによって作られたアクセッサを使っています。後者だとpropertyの宣言によってただの代入だったりretainやcopyされたり排他がかかったりと動作が異なります。
delegateはretainしない
Weak References to Objects(Memory Management Programming Guide)
メソッド名に接頭語は使わない。
General Rules(Coding Guidelines for Cocoa)
引数にキーワードをつける。
General Rules(Coding Guidelines for Cocoa)
プライベートメソッドは独自の接頭語をつけたほうがよい
Private Methods(Coding Guidelines for Cocoa)
Typographic Conventions(Coding Guidelines for Cocoa)
C++と同じで#defineだとプリプロセッサで数値に置き換えられてしまうので、enum,constを使う。
Other types of constants(Coding Guidelines for Cocoa)
通常ケースのハンドリングでは例外は使わない。
そのため、例外はテストなどのデバッグ期間でしか発生しないものでなければなりません。
Exceptions and Errors(Coding Guidelines for Cocoa)
名前空間はない
ヘッダーファイルでの2重インクルードの防止は不要
余談ですが、Googleのガイドラインを見るとかなりがっちり決まってたので驚きました。
Objective-Cはフリーダムにかける方だと思うので複数人での開発であれば、Googleのように厳密に決めてやったほうがいいと思います。しかし、性能などとのトレードオフもあるので他のガイドラインをまるパクりではなく、プロジェクトにあったものを選択して採用すべきです。
参考資料
Cording Guidelines for Cocoa
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html
The Objective-C Programming Language
http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html
Memory Management Programming Guide