コーディングの趣味の話なので必ずしも重要ではないが、個人的には大発見。
Problem
インスタンスプロパティ(Objective-Cではインスタンス変数と呼ぶ)の表示名とgetter/setter(Objective-Cではアクセサメソッドと呼ぶ)の表示名を異なるものにしたい。例えば、インスタンス変数をNSStringの”_name”と定義、そのアクセサメソッドは先頭のアンダースコアを除いた”name”で扱いたい。
Recipe
プロパティの定義は普通に”_name”とする。setter/getterを作成する際に以下のような細工をする。@propertyと@synthesizeの書き方が定義されたインスタンス変数と若干異なる(特に@synthesize)。
//TestClass.h @interface TestClass : NSObject{ NSString *_name; } @property (retain) NSString *name; @end //TestClass.m @implementation TestClass @synthesize name = _name; @end
クラス内部でのインスタンス変数への直接アクセス(“_name”)とアクセサメソッド経由のアクセス(“self.name”)が明確に区別できるのが利点。Xcodeの適当な色づけに頼るよりアンダースコアの有無による絶対的な判断の方がしっくりくるという理由もある。
ActionScriptで言うと
上記内容は以下のgetter/setterと同等。ほんとに趣味の問題。
protected var _name:String; public function get name():String{ return _name; } public function set name(value:String):void{ _name = value; }
Reference
【コラム】ダイナミックObjective-C (102) プロパティ(2) – プロパティの宣言 | エンタープライズ | マイコミジャーナル