2010年4月29日木曜日

@property (プロパティ宣言)

さて、これまで何故Objective-Cに戻ったかというと、このやっかいなプロパティ宣言(というよりアウトレット宣言に必要なプロパティ宣言)を知るためでした。(道のりは長い...)

◆ヘッダファイル(abc.h):
@interface Object: Itssuper{
   type *name
}
@property(attributes) type *name; //(アクセス権限等) アクセサ型/名の宣言
@end

◆実行ファイル
#import "abc.h"
@implement Object
@synthesize name; //アクセサメソッドの合成指示
       // getterの名前は"name", setterの名前は"setName"となる
@end
---------------------------------
◆attributesについて
attributesには、「書き込み可能性」、「セッタの動作」、「アトミック性」を指定する。

(1)書き込み可能性(setアクセサメソッドを持つかどうか)
    readwrite 読み取り/書き込み可能(getter/setter双方を使用)
    readonly  読み取りのみ(getterのみ使用、代入禁止)

(2)セッタの動作(seterについての指定)
    assign   単純代入<スカラ型、デリゲート等> (default)
    retain メモリにsetterオブジェクトを保持する。
    copy   代入にオブジェクトのコピーを使用する。 NSCopyingプロトコルの実装要。
  
     NSString, NSNumber, NSValue などといったオブジェクトを値として扱っているようなときは、NSMutableString等での意図しない変更を抑止するため、copy を使用します。それ以外の場合は、retain です。NSWindow などといった、値が欲しいわけではなく、その参照に注目したいときです。 copy してしまうと、NSWindow が二つできてしまうので、このようなインスタンスを copy してはいけない。deligate等の循環参照の可能性がある場合は、assign(単純代入)を使用する。

(参考)http://lifeaether.homeunix.net/overtaker/blog/?p=1180

(3)アトミック性
     マルチスレッド環境の場合は指定なく、戻り値の保持と自動解放を行う。単に値を返すだけの場合はnonatomicを指定する。

0 件のコメント:

コメントを投稿