3

Xcode4 では、Apple がアプリケーション テンプレートを更新して、インスタンス変数の前にアンダースコアを含めることに気付きました。

// Xcode4
@property (nonatomic, retain) IBOutlet UIWindow *window;
@synthesize window = _window;

.

// Xcode3
@property (nonatomic, retain) IBOutlet UIWindow *window;
@synthesize window;

これの有用性についてさまざまな意見があることは知っていますが、更新されたテンプレートが次の場所にあるかどうかに興味がありました。

  • (1) 新しいベスト プラクティスを強調する。
  • (2) Apple がどのように物事を行うかを示すが、古い方法で行うことを意味する。
  • (3) 個人的な好みで構いません。
4

1 に答える 1

6

過去 (iOS より前) に、Appleは ivars にアンダースコア プレフィックスを使用することを推奨していなかったため、これは興味深いことです。

特にメソッドでは、プライベートを意味する接頭辞としてアンダースコア文字を使用しないでください。Apple は、この規則の使用を留保します。第三者が使用すると、名前空間の衝突が発生する可能性があります。彼らは無意識のうちに既存のプライベート メソッドを独自のメソッドでオーバーライドし、悲惨な結果を招く可能性があります。プライベート API で従うべき規則に関する提案については、「プライベート メソッド」を参照してください。

しかし、最新の Objective-C ランタイムでは、サブクラスでの ivar の名前付けの競合が解消されているため、これはもはや問題ではありません。そのため、Apple の内部コードがどのように見えるかを一致させるために、デフォルトでテンプレートにアンダースコア プレフィックスを使用させているのだと思います。

于 2011-05-26T13:55:52.287 に答える