Objective-C 基礎(6)- 変数のスコープとプロパティ




§1 変数のスコープについて

クラスのインスタンス変数のスコープ(アクセス権)についての話です。

インスタンス変数はデフォルトではクラス外部からはアクセスできないように隠蔽されています。ではこれらを外部からアクセスできるようにするにはどうしたら良いでしょうか?Objective-Cではアクセス権に関するコンパイラディレクティブ(@〜)が用意されているので、それを使うことでインスタンス変数のアクセス権をコントロールすることができます。以下の3つのコンパイラディレクティブが用意されています。

@private
クラス外部からはアクセスできません。完全に隠蔽された状態です。インスタンス変数をクラス内だけで利用する場合に指定します。

@protected
クラス内部およびサブクラス内であればアクセスできます。デフォルトではこれが指定されています。

@public
クラス外部からも自由にアクセスできます。完全に公開された状態です。

指定の方法は以下のようになります。

コンパイラディレクティブを指定しない場合は@protectedを指定しているのと同じ状態になります。

クラスのインスタンス変数にアクセスするには「->」を使用します。こんなカンジでアクセスできます。

§2 プロパティ

インスタンス変数を@publicに指定すればアクセスが簡単になりますが、むやみに@public指定をするのはいささか乱暴な気がします。値を取得するメソッドと値を設定するメソッドをそれぞれ作成すれば問題ありませんが、これも少しメンドウです。そこでインスタンス変数にアクセスする方法として「プロパティ」が用意されています。これは値取得用メソッドと値設定用メソッドを自動的に生成してくれる便利な機能です。プロパティを利用するには以下のようにします。

●@interface内でプロパティを記述する。
@property (属性) データ型 プロパティ名;

【属性】
プロパティの性質を示す値を記述します。以下のような値が設定可能です。省略することもできます。
retain――オブジェクトを保持する
assign――オブジェクトを参照する
copy――オブジェクトをコピーして保持する
readwrite――読み書き可能(デフォルトではこれが設定される)
readonly――読み取り専用(これを指定すると値取得用メソッドのみ使用できる)
getter=メソッド名――値取得用メソッド名を明示的に指定(自分でメソッド名を命名したい時)
setter=メソッド名――値設定用メソッド名を明示的に指定(自分でメソッド名を命名したい時)

【データ型】
対象のインスタンス変数のデータ型を指定します。

【プロパティ名】
プロパティの名前を指定します。通常はインスタンス変数と同じ名前にします。

こんなカンジで記述します。

●@implementation内に@synthesizeディレクティブを記述する。
@synthesize プロパティ名;

@propertyディレクティブでインスタンス変数と違う名前をプロパティ名にした場合は以下のようにします。
@synthesize プロパティ名 = インスタンス変数;

カンマで区切って複数のプロパティを記述することも可能です。
@synthesize プロパティ名1, プロパティ名2, プロパティ名3;

こんなカンジで記述します。

これでプロパティが使用できるようになります。生成されるメソッドは

値取得用メソッド —- プロパティ名と同じ名前のメソッド
値設定用メソッド —- プロパティ名の前に「set」を付けたメソッド(setの次の文字は大文字になります)

例えば、インスタンス変数myStringに対してプロパティを

と設定した場合は、値取得用メソッド「myString」と値設定用メソッド「setMyString」が生成されます。

以下のようにすればメソッド名を好きな名前にすることもできます。(setterのメソッドに「:」を付けるのを忘れないように)

プロパティへのアクセスはドット演算子「.」を使用します。

以下はプロパティを使用してインスタンス変数にアクセスしている例です。

ヘッダファイル(TestClass.h)

クラスファイル(TestClass.m)

メインファイル(main.m)

Objective-C 基礎 目次

以下の記事も参考にして頂ければと思います。
Objective-C 基礎(1)- Xcodeのインストールとプロジェクトの作成
Objective-C 基礎(2)- Objective-Cの概要とメソッドの呼び出し
Objective-C 基礎(3)- クラス定義の方法
Objective-C 基礎(4)- クラスの使い方
Objective-C 基礎(5)- クラスメソッドとインスタンスメソッド
Objective-C 基礎(6)- 変数のスコープとプロパティ
Objective-C 基礎(7)- 変数のデータ型
Objective-C 基礎(8)- 文字列とNSStringクラス
Objective-C 基礎(9)- 可変文字列とNSMutableStringクラス
Objective-C 基礎(10)- Objective-Cの配列
Objective-C 基礎(11)- Objective-Cの連想配列
Objective-C 基礎(12)- ループ処理
Objective-C 基礎(13)- プロトコル


シェアして頂けると嬉しいです

















チャーム本店



価格.com ブロードバンド

価格.com 自動車保険









■コメントはお気軽にどうぞ