スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

プロパティ

どうも

プロパティについて。書きたいと思います。プロパティとは、ざっくり言えばなんていうか、今まで使ってきたアクセサと、セッタと同様な事と言えます。

【プロパティの宣言】
例えば、ありきたりすぎるんですが、int型のvalueと、NSStringオブジェクト型のオブジェクトnameを持っているオブジェクトがあったりするとします。すると、

@interface MyObject : NSObject
{
int value;
NSString *name;
}

@property (readwrite) int value;
@property (readwrite, copy) NSString *name;

@end

はい、こんな感じです。

この太字で書いた部分は、つまり、アクセサやセッタを宣言しているような感じになっているわけなんですね。

では()の中にあるのは何なのでしょうか?これは、プロパティとして宣言したインスタンス変数にどの程度アクセスを許すかという事になります。readwriteは、見てもわかるように、「書き込み、読み取り可能」という事を宣言しています。
copyは、「そのインスタンス変数をコピーする事ができますよ」という宣言になります。
また、プロパティには、オブジェクト(id型、その他)も宣言する事ができます。そのとき、オブジェクトが解放されないように、retainを()の中に宣言する事ができます(ガーベジコレクションを使わなかったとき)。また、ガーベジコレクションを使った時にはassign(xcodeの補完機能でいつも入力しているため、スペルが間違ってるかもです)を宣言できます。
などなど、とにかく()の中には、他のオブジェクトからアクセスされるとき、どの程度まで許すかを設定します。

【プロパティを利用する】
@interfaceで宣言しても、@implementation内で使えなければ意味がありません。そこで、その変数を利用しますよという宣言になるのが、コンパイラ指示子「@synthesize」です。あ、コンパイラ指示子は@とかではじまるコンパイラへのメッセージみたいなのの言い方です。宣言の仕方は、
@synthesize value;
@synthesize name;
という感じです。簡単ですね。
こうするだけで、そのインスタンス変数を利用する事が出来ます。

【ドットアクセス】
このように宣言すると、C++などではよくある「ドットアクセス」を利用できます。ただ僕としてはなんかあんまり使いません(というより、なんか使うといつもコンパイラに文句を言われるので...汗。ちょっとまだ使い方に困っています..)。が、一応。
上のオブジェクトのvalue変数にアクセスするには、
MyObject *myObject;
int a = myObject.value;
のような感じでいけます(はず)。あ、ただ、id型ではできないのに注意を!できないんです。ハイ。

C++から来た人は分かりやすい書き方のはずです。

こんな感じですかね。

そうそう。プロパティ宣言したインスタンス変数は、アクセサ、セッタを作ったようなものなので、当然、
MyObject *myObject;
int a = [myObject value];
というように使えます。

この自動的に作られる、アクセサ、セッタの名前は
アクセサ・・・「変数名」
セッタ・・・・「set」+「最初を大文字にした変数名」
という感じです。あ、当然かぎ括弧は入んないですよ!!

つまり、もし、アプリを作っていてアクセサが作動したログとかをコンソールに書き出したい場合には、この名前のメソッドを作れば、そっちが実行されます。(はず)

まぁやってみれば分かります。

ではこれで
スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

小さなプログラマ

Author:小さなプログラマ
小さなプログラマです。

これはあくまで、「勉強ログ」なので間違っている場合が多々あります。

なので、このブログに書いてあることは、8%くらいの信じ度でお願いします。

間違っているじゃないか!と言われてもあれなので。

最新記事
最新コメント
最新トラックバック
月別アーカイブ
メールフォーム

名前:
メール:
件名:
本文:

カテゴリ
カウンター
検索フォーム
RSSリンクの表示
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。