Xcode 4.4でさよなら@synthesize
Xcode 4.4だと@synthesizeがいらなくなったってお話だよ。
Xcode 4.4にして試してみたかったのがプロパティを設定する時に必要な@synthesizeが不要になるって例のあれだよ。WWDCでも言ってたよね。
てっきりiOS 6でのお話かと思っていたのでこんなに早く使えるようになるとは驚いたよ。
さっそく試してみたんだけどさ、俺は古風な男なのでARCなんて生ぬるいシロモノは使わないのでそこのところ注意してね(ホントは勉強する気がないだけなんだ)。
まず従来の書き方だとこんな感じでやってたと思うんだ。
例えばPersonクラスのヘッダーファイル側に
インスタンスの宣言はヘッダー側でも実装側でもいいみたいだけど、最近は実装側ファイルに書くようにしてるんだ。だってそっちの方が自然じゃない?外部のクラスからはどうでもいいインスタンスなんだからクラス内で処理しとけよって感じだし。
ってことでインスタンスの宣言を
最後に実装ファイル側に
で、今回のXcode 4.4だとこれが以下のようになるんだよ。
ヘッダー側にプロパティの宣言するんだ。
すると実装ファイル側に@synthesizeナントカって書かなくても、プロパティとして扱ってくれてself.ageはもちろんPersonクラス内なら_ageでもアクセスできるんだよ!
ずいぶん楽、というかすっきりするよ、これ!
他の人はどうしてるのか知らないけど、俺はクラス内だと読み込むのにself.ageとは書かないで_ageって書いてるんだ。だってその方が短いし、かつプロパティってわかるだろ?だから_ageでアクセスできる、ってのも俺にとっては重要なんだよね。
そうそう、XcodeのEdit/Refactor/Convert to Modern Objective-C Syntaxで一度に書き換える、って機能があるんだけどこれが期待通りには動いてくれないんだ。以前すでに書いたソースに@synthesizeなんかがあれば消してくれる機能だと思うんだけどなぜか"No source changes necessary."って出ちゃうんだ。なんでかなあと思ってよくよく見ると、、、

Minimum deployment target will be set to 10.6.8 for Mac OS X targets.
ってdeployment targetの指定がOS Xしか書いてないからiOSじゃだめなのか。
Xcode 4.4にして試してみたかったのがプロパティを設定する時に必要な@synthesizeが不要になるって例のあれだよ。WWDCでも言ってたよね。
てっきりiOS 6でのお話かと思っていたのでこんなに早く使えるようになるとは驚いたよ。
さっそく試してみたんだけどさ、俺は古風な男なのでARCなんて生ぬるいシロモノは使わないのでそこのところ注意してね(ホントは勉強する気がないだけなんだ)。
まず従来の書き方だとこんな感じでやってたと思うんだ。
例えばPersonクラスのヘッダーファイル側に
@property(nonatomic, assign) NSInteger age; @property(nonatomic, retain) NSString *name;ってプロパティを設定するよね。
インスタンスの宣言はヘッダー側でも実装側でもいいみたいだけど、最近は実装側ファイルに書くようにしてるんだ。だってそっちの方が自然じゃない?外部のクラスからはどうでもいいインスタンスなんだからクラス内で処理しとけよって感じだし。
ってことでインスタンスの宣言を
NSInteger _age; NSString *_name;ってするでしょ。もっともこれは以前から不要だったんだよね、確か。俺は惰性で書いてたけどさ。
最後に実装ファイル側に
@synthesize age = _age; @synthesize name = _name;って書くよね。こうしておけばPersonクラス内で_ageでもself.ageでもアクセスできるし、外部クラスからだとperson.nameとかできるわけだよね。
で、今回のXcode 4.4だとこれが以下のようになるんだよ。
ヘッダー側にプロパティの宣言するんだ。
@property(nonatomic, assign) NSInteger age; @property(nonatomic, retain) NSString *name;これは同じ。ヘッダー側にこのクラスのプロパティを書く、そりゃそうだよね。さすがにこれは省けない。
すると実装ファイル側に@synthesizeナントカって書かなくても、プロパティとして扱ってくれてself.ageはもちろんPersonクラス内なら_ageでもアクセスできるんだよ!
ずいぶん楽、というかすっきりするよ、これ!
他の人はどうしてるのか知らないけど、俺はクラス内だと読み込むのにself.ageとは書かないで_ageって書いてるんだ。だってその方が短いし、かつプロパティってわかるだろ?だから_ageでアクセスできる、ってのも俺にとっては重要なんだよね。
そうそう、XcodeのEdit/Refactor/Convert to Modern Objective-C Syntaxで一度に書き換える、って機能があるんだけどこれが期待通りには動いてくれないんだ。以前すでに書いたソースに@synthesizeなんかがあれば消してくれる機能だと思うんだけどなぜか"No source changes necessary."って出ちゃうんだ。なんでかなあと思ってよくよく見ると、、、

Minimum deployment target will be set to 10.6.8 for Mac OS X targets.
ってdeployment targetの指定がOS Xしか書いてないからiOSじゃだめなのか。
スポンサーサイト