Apple Developer Connection
Advanced Search
Member Login Log In | Not a Member? Contact ADC

< 前ページ次ページ >

概要

プロパティには2つの側面があります。すなわち、プロパティを宣言するための構文要素と、プロパティにアクセスするための構文要素です。このセクションでは両方の概要を述べ、この機能の背後にある目的についても説明します。

このセクションの内容:

目的
プロパティの宣言
プロパティへのアクセス


目的

インスタンス変数へのアクセスは通常、一組のアクセサメソッド(getter/setter)を通じて行います。このアクセサスタイルのAPIを通じて管理される状態を、クラスのインスタンスのプロパティと見なすことができます。アクセサメソッドを使うことにより、カプセル化の原則が守られます(『Object-Oriented Programming with Objective-C』 > 「The Object Model」の「Mechanisms Of Abstraction」を参照)。APIのクライアントを実装の変更から隔離しながら、getter/setterペアの動作を厳格に管理でき、基本的な状態管理も実施できます。

そのためアクセサメソッドの使用には大きな利点がありますが、それでもなおアクセサメソッドの記述は手間のかかる作業であり、ガーベジコレクトされる環境と、マネージドメモリ環境の両方をサポートするコードを記述しなければならない場合は特に面倒です。また、APIのコンシューマにとって重要と考えられるプロパティの側面(アクセサメソッドはスレッドセーフか、または設定時に新しい値がコピーされるかなど)は隠されたままです。

Objective-Cの宣言されたプロパティの機能には、次の利点があります。

プロパティの宣言

プロパティの宣言は、事実上、クラスのインスタンスの属性に対してsetterとgetterを宣言するための簡単な方法ですが、アクセサの動作の仕様も提供します。宣言自体のほかに、コンパイラにアクセサの合成を指示する実装ディレクティブと、実行時に自分自身でメソッドを指定することをコンパイラに伝える実装ディレクティブがあります。

リスト 4-1は、valueというプロパティの宣言、および宣言で指定した仕様に合致するアクセサメソッドを作成するようにコンパイラに指示する@synthesizeディレクティブの使用例を示しています。

リスト 4-1  クラスにおけるプロパティの宣言

@interface MyClass : NSObject
{
    NSString *value;
}
@property(copy, readwrite) NSString *value;
@end
 
@implementation MyClass
@synthesize value;
@end

プロパティへのアクセス

ドット構文を使うと、構造体の要素にアクセスするときと同じパターンを使ってプロパティにアクセスできます。

MyClass *myInstance = [[MyClass alloc] init];
myInstance.value = @"New value";
NSLog(@"myInstance value: %@", myInstance.value);

ドット構文は単なる「シンタックスシュガー」であり、コンパイラによってアクセサメソッドの呼び出しに変換されます(そのため実際にはインスタンス変数に直接的にアクセスするわけではありません)。上記のコード例は、次のコードと完全に同じです。

MyClass *myInstance = [[MyClass alloc] init];
[myInstance setValue:@"New value"];
NSLog(@"myInstance value: %@", [myInstance value]);


< 前ページ次ページ >


Last updated: 2007-10-31




Did this document help you?
Yes: Tell us what works for you.

It’s good, but: Report typos, inaccuracies, and so forth.

It wasn’t helpful: Tell us what would have helped.
Get information on Apple products.
Visit the Apple Store online or at retail locations.
1-800-MY-APPLE

Copyright © 2007 Apple Inc.
All rights reserved. | Terms of use | Privacy Notice