0

重複の可能性:
カカオのobjective-cクラスの変数の前にあるアンダースコアはどのように機能しますか?

Appleのフレームワークのヘッダーファイルで、クラスインターフェイス内にプレフィックスunderscopeを持つApplenameインスタンス変数が見つかりました。以下の_delegateインスタンスのように:

@interface ClassName : NSObject {
    id _delegate;
}
@end

しかし、独自のインスタンス変数を定義するときにこの命名規則に従うと、副作用はありますか?私はかなり長い間、この質問の答えを探してきました。

アップルのコードガイドラインでは、アップルはメソッド名がアンダースコアで始まることを予約していると述べており、インスタンス変数の命名の問題に関する制限については言及していません。

私の同僚は、インスタンス変数をアンダースコアで始めると、選択した名前がフレームワークのプライベートヘッダーファイルに存在する場合、フレームワークと衝突する可能性があると述べました。これは可能ですか、それともアップルがすでに使用している可能性があるため、アンダースコアで始まる名前を使用しない理由になりますか?

4

3 に答える 3

3

正直なところ、非常に大きなプロジェクトでは、すべてのローカルプライベート変数にアンダースコアを付けて名前を付けましたが、このようになり始めました。_thisVar _thatVar _thisSavesSomething

私の10年間のコーディングと大小のプロジェクトでの作業(私はこれを行ったが、行っていない)。しないでください。それは時間の無駄です。(怒鳴ってすみません)。

私の理由はです。

  1. それはコードを醜くします、私は醜いコードを嫌います。
  2. 使用および参照する変数ごとに不要な入力を広告します。
  3. オートコンプリートが少し役に立たなくなるので、xcodeオートコンプリートが変数によりよく一致するようになる前に、「_」+変数の名を入力する必要があります。
  4. ヘッダーファイルで変数を明示的にプライベートおよびパブリックにすることができるため、すべての変数の先頭に「_」などの新しい命名規則を追加する必要はありません。

本当にプライベートなものに「_」を使用するかもしれません。これは特別なことを示したいと思います。しかし、私はほとんどそれを使用しません。

これで問題が解決することを願っています。ジョン。

于 2011-04-11T11:56:55.317 に答える
3

副作用はありません。ただし、アンダースコアを使用すると、プライベート ivar や関数パラメーター名にアクセスするときにコードが読みやすくなります。

たとえばNSString *_name;、ヘッダーファイルにあるとしましょう。次に、コードでは次のようになります。

- (void)doSomethingWithName:(NSString *)name {
    // the underscore makes reading code easier
    _name = [name retain];
    name = [_name retain];  // you know right away that this is wrong
}

私は個人的にGoogle Objective-C Style Guideに従っており、末尾にアンダースコアを使用しています。したがって、私の ivar は次のようになります。NSString *name_;

于 2011-04-11T11:52:04.083 に答える
-1

John に反して、私は常にローカル変数の前にアンダースコアを付けています。これは主な理由の 1 つで、パブリック変数の代わりにプライベート変数を誤って使用することを防ぎます。プライベート変数にアクセスする必要があるのは、init、dealloc、およびassessorメソッド内だけです。プライベート変数を誤って使用すると、追跡が困難なバグやメモリ リークが発生する可能性があります。

于 2011-04-11T13:37:16.050 に答える