Learn iPhone, iOS, Objective-c, Swift, cocos2dx, Unity and ….?

iOSやAndroid開発でのエラー解決法や便利tipsのメモ

RSS Feed

Objective-C – @property宣言した変数へのアクセス方法について –

2 Comments
Posted by Kuro on 2013/02/09

スポンサードリンク

property宣言した変数への2種類のアクセス方法、アンダーバーでのアクセス(_piyo)とselfドット(self.piyo)、の違いについて調べてみました。

簡単にまとめると、selfドットによるアクセスは@property宣言時に指定した方法に沿って作られたアクセッサメソッドを介してのアクセスで、アンダーバーによるアクセスはインスタンス変数への直接的なアクセスということです。

違いを確かめるためにサンプルコードを書いてみました。

この例では@propertyでretain指定しているので、selfドットでアクセスするとallocによるretainのカウントアップとセッター内でのretainにより、retainCountが2になります。

これに対し、アンダーバーでアクセスすると、retainCountは1になります。

アクセッサメソッドは自動的に作られるのでXcode上で見ることはできないのですが、恐らく以下のようなものになります。

つまり、self.piyo=または[self piyo]=は[self setPiyo:]をしているということになります。

以前はメタファイルで”@synthesize piyo = _piyo;”と明示的に宣言しなくてはなりませんでしたがXcode4.4以降は@synthesizeは書かなくてもアンダーバー付きのインスタンス変数に自動的に結び付けられます。

KVC(Key-Value Coding)について

この@propertyを使った変数へのアクセス方法はAppleが提供しているKVC(Key-Value Coding)という仕組みにもとづいています。

Key-value coding is a mechanism for accessing an object’s properties indirectly, using strings to identify properties, rather than through invocation of an accessor method or accessing them directly through instance variables. In essence, key-value coding defines the patterns and method signatures that your application’s accessor methods implement.

(http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/KeyValueCoding/Articles/Overview.html#//apple_ref/doc/uid/20001838-SW1)

「Key-value codingとはオブジェクトのプロパティに間接的にアクセスするための仕組みです。アクセッサメソッドを呼び出したりインスタンス変数に直接アクセスしたりするのではなく、プロパティを識別する文字列を用いてアクセスします。本質的には、Key-value codingはアクセッサメソッドの実装方法を定義していると言えます。」

スポンサードリンク


You can leave a comment, or trackback from your own site.

2 Comments

  • On 2013/02/09 at 23:57 j said

    勉強になります

    返信

  • On 2013/02/10 at 00:17 Kuro said

    i think so too.

    返信

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Pingbacks / Trackbacks

スポンサードリンク

Popular Posts