Hatena::Groupiphone-dev

iPhoneアプリ開発まっしぐら★ このページをアンテナに追加 RSSフィード

引っ越し後の日記はコチラです

tokoromのその他の日記

2010-07-11

いつのまにかインスタンス変数の記述が省略できるようになってた

| 01:19 | はてなブックマーク -  いつのまにかインスタンス変数の記述が省略できるようになってた - iPhoneアプリ開発まっしぐら★

これってはじめからでしたっけ?

プロパティを使う場合、もともと

// 定義
@interface UIViewBoundsSample : UIViewController
{
 @private
  UILabel* label0;
}

@property (nonatomic, retain) UILabel* label0;

@end

// 実装
@implementation UIViewBoundsSample

@synthesize label0;

- (void)dealloc {
  self.label0 = nil;
  [super dealloc];
}

@end

のように、

  • インスタンス変数の定義
  • @property
  • @synthesize

の3つ全てを記述しないといけなかったと思うのですが、少なくとも今つかっているXCode3.2.3だと「インスタンス変数の定義」を省略してもきちんと動いています。

いつからだろう?

なにはともあれ、コード量が減るのは嬉しいことです。

// 定義
@interface UIViewBoundsSample : UIViewController

@property (nonatomic, retain) UILabel* label0;

@end

// 実装
@implementation UIViewBoundsSample

@synthesize label0;

- (void)dealloc {
  self.label0 = nil;
  [super dealloc];
}

@end

natsun_happynatsun_happy2010/07/13 05:16私もあまり詳しくはないのですが、定義を省略できるかはランタイムに依存しているはずです。

"modern"なランタイム(iPhoneと64bit Mac)であればこの記述方法が可能なようです。SDK4.0でシミュレータのランタイムが変更になったので、SDK4.0からは、実機/シミュレータともに使えるようになったのだと思います。逆に、SDK3.2(もしくはそれ以前)を使うと、実機ビルドではOK、シミュレータビルドではNGになるのではないかと思います。

何はともあれ、シミュレータと実機で環境が統一されつつあるのは嬉しいことですね。

この"modern"なランタイムには、ほかにもいろいろとメリットがありそうです。私ももう少し調べてみようと思います。

ひとまずここが詳しそうです:
http://cocoawithlove.com/2010/03/dynamic-ivars-solving-fragile-base.html

tokoromtokorom2010/07/15 21:14natsun_happyさんTwitter and Blogコメントありがとうございます。
"modern"なランタイムに他にも有用な更新があるかもしれないと思うと楽しみです!
ぼくも調べてみます!

AbiAbi2013/01/22 20:00That hits the traegt dead center! Great answer!

anuzbtlanuzbtl2013/01/25 16:59iNz2Vq , [url=http://bcfbpcwcprmo.com/]bcfbpcwcprmo[/url], [link=http://fjfprdohinqv.com/]fjfprdohinqv[/link], http://umlwqrigzvbz.com/