Entries

スポンサーサイト

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

Objective-Cのランタイムとモダンプロパティ

タグ: Objective-C Mac iPhone

「同名のインスタンス変数が存在しないプロパティ」を「代替となるインスタンス変数の指定なし」で @synthesize すると、レガシーランタイム(Mac OS Xの32bitプログラム)向けのコンパイルでは「エラーになる」が、モダンランタイム(Mac OS X 10.5?の64bitプログラム及びiPhoneアプリケーション)向けのコンパイルでは「代替のインスタンス変数が勝手に用意される」。
(『The Objective-C 2.0 Programming Language: Declared Properties』より)

@interface MyClass : NSObject
@property (retain) id property;
@end
 
@implementation MyClass
@synthesize property; // iPhone Device向けではエラーにならない
@end

いちいち同名のインスタンス変数を書くのも面倒だし、これはこれで良いのだが、

If you are using the modern runtime and synthesizing the instance variable, however, you cannot access the instance variable directly, so you must invoke the accessor method:

- (void)dealloc {
    [self setProperty:nil];
    [super dealloc];
}

そこまでやってなおdeallocでrelease相当のものを要求するのはなぜだ……
「@synthesizeはretain/releaseを考慮したsetter/getterを自動生成してくれる」のだから、「@synthesizeが自動生成するインスタンス変数はdeallocで必要に応じてreleaseされる」くらいやってくれてもいいと思うのだが。

でもまあ、この「モダン」な書き方、今のところあまり使いどころがない。
iPhoneではたしかに使えるが、「Mac OS Xの32bitプログラム」であるiPhone Simulatorでは使えないわけで……

スポンサーサイト

コメント

コメントの投稿

コメントの投稿
管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://idlysphere.blog66.fc2.com/tb.php/201-196840de
この記事にトラックバックする(FC2ブログユーザー)

Appendix

タグ

Blog内検索

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