— boreal-kiss.com

[iPhone]プロパティのsetter/getterの表示を変更する

コーディングの趣味の話なので必ずしも重要ではないが、個人的には大発見。

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) – プロパティの宣言 | エンタープライズ | マイコミジャーナル

0 comments
Submit comment