Objective-Cでインスタンス変数はアンダースコアで開始する

浦島太郎状態だったXcode4をさわってリハビリ中。よくみるとXcodeが生成するコードのテンプレートがだいぶかわっている。特に気になったのが以下の点。

インスタンス変数の宣言がなくなってる

@interface DelegateDemoAppDelegate : UIResponder 

@property (strong, nonatomic) UIWindow *window;

@property (strong, nonatomic) DelegateDemoViewController *viewController;

@synthesizeの書式が変わっている

@implementation DelegateDemoAppDelegate

@synthesize window = _window;
@synthesize viewController = _viewController;

インターネットの大海を探索してみたところ、以下のブログで明快に説明されていた。

プロパティに対応するインスタンス変数の命名規則について – Awaresoft

なるほど、欧州最新形では、インスタンス変数にはアンダースコアのprefixをつけ、ヘッダで宣言もしないらしい。全然しらなかった。インスタンス変数とプロパティの使い分けは以前からなやましかったので、これで統一されたのであればスッキリ。

あと関係ないけど、Xcode4になってから、Interfce Builderとの連携が結構パワーアップしている。

[Xcode][IB] IBOutletやIBActionをマウス操作で接続 – iOS 開発ブログ Natsu’s note

この操作でもアンダースコア原則を守ってくれるのかと思いきやそうはならなかった。