プロパティの基本的な役割
プロパティの基本的な役割は、他のオブジェクトが自オブジェクトの中にある変数やオブジェクトへアクセスする時のルールを決定することです。 その変数やオブジェクトが外から変更可能なのか、オブジェクトを外から変更する場合、外から渡されたオブジェクトをそのまま持つようにするか、 そのコピーをとって持つのかといったこともプロパティで決定します。iPhoneアプリケーションの場合、普通の変数についてはnonatomicとassignを、 自分で使うビューやラベル、配列、ディクショナリーなどにはnonatomicとretainを、文字列やデータなどにはnonatomicとcopyを設定するようです。 BOOL値については細かい属性はつけずそのまま書くだけで良いようです。プロパティを設定する場所はヘッダファイルの@interface宣言の中括弧が終わったところから、 @endで終わるまでの間に書きます。以下に例を示します。
@property (nonatomic, assign) NSInteger integerValue;
@property (nonatomic, retain) NSMutableArray *myArray;
@property (nonatomic, copy) NSString *myString;
@property BOOL myBoolValue;
自分自身の内部へのアクセスだけど…
先ほどは他のオブジェクトからと書きましたが、自分のメンバに対してもプロパティのルールが適用される場面があります。 それはself.を変数名の前に付けた場合です。通常なら自分の持つ変数なのでフルアクセスができて当たり前ですが、seli.を前に付けていると あたかも外部からのアクセスのような振る舞いになります。self.を付けた記述は可変長配列の初期化などでよく見られます。 以下に例を示します。
NSMutableArray *ma = [[NSMutableArray alloc]init];
self.myArray = ma;
[ma release];
この例では上にあるmyArrayを初期化しています。まず1行目でmaというローカルオブジェクトを作成し、メモリ上にアドレスを作ります。 2行目でそのアドレスを自分のメンバオブジェクトであるmyArrayに代入します。ここで代入されたアドレスはプロパティのルールに従ってmyArrayとして保持(retain)されます。 3行目でmaに割り当てたメモリを開放(release)します。といっても本当に開放されるわけではありません。なぜならmaを指すアドレス自体のretain countについて考えると、1行目でallocされて+1、myArrayへの代入時にプロパティのルールから+1で合計して+2、3行目でreleaseされるので-1で合計で+1となりますから、 このアドレスのオブジェクトそのものは保持され続けます。maというローカルの変数名についての帳尻を合わせているだけ、ということになります。 このような初期化手法はアップル社の提供しているサンプルでも多数見られるため、標準的な方法なのだろうと思われます。
前へ次へ