[iPhone]Objective- Cの勉強メモ:プロパティ宣言:@propertyの意味
ヘッダーファイルにて、プロパティ宣言をすることでそのプロパティについてのゲッターセッターが実装される。
プロパティ宣言をしなくても、自分で実装処理を書いてもよい
プロパティの書式は、
//ヘッダーファイルに書く //@property (属性 , 属性, ・・・) データ型, 名前 //例 @property ( nonatomic, retain ) NSTimeZone* timeZone; //ソースファイルに書く @synthesize timeZone;
上の例を自分で実装した場合は
//ソースファイルに書く //ゲッター -(NSTimeZone*) timeZone{ //同時実行不可のための処理:属性nonatomicに相当 @synchronized(self){ return timeZone; } } //セッター:読み書きについて属性が未設定なのでセッターまで生成される -(void) setTimeZone:(NSTimeZone *)zone{ //同時実行不可のための処理:属性nonatomicに相当 @synchronized(self){ if(timeZone != zone){ [timeZone release]; timeZone = [zone retain];//保持する際は保持カウントをアップさせる:属性retainに相当 } } }
※@synchronizedは排他制御するかしないか。
マルチスレッドで同時に実行して欲しくない処理があるとき、これを指定することで片方のスレッドを停止することができる。
上の例では排他制御に対応しており、プロパティの属性でnonatomicを指定すると、排他制御はしなくなる。
Tweet