さて、これまで何故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 件のコメント:
コメントを投稿