質問
出するのに使用した、Objective-Cできたのは、長期的にはC++)プログラマーを探していた助言-提言に命名規約のための変数です。
私の個人的嗜好に活用する接頭辞のためのインスタンス変数の両方の機能再構成に成功しました。内の機能及び防止シャドーイング機能パラメータ。しかし私はファンの性ルールウプレフィックスを除きますプロパティ名な作品も見daft).同様に使ってみました、"します。可変による"コンベンションがなされた場合にのみ、かかる物件です。
それ以下のコードは何がお好きなネーミングスタイルをインスタンス/機能を変数には?まんべう対応しようと考えておられるのシャドーイング機能params?
@interface GridItem : NSObject
{
CGRect _rect;
...
}
@end
-(void) initFromRect:(CGRect)rect
{
_rect = rect;
...
}
感謝!
解決
最もココア事業の使員の方はログとして非IBOutlet
インスタンス変数prefix、を使用していない接頭辞 IBOutlet
インスタンス変数.
その理由を利用しないunderbars用 IBOutlet
インスタンス変数の場合にnibファイルがロードされた場合、設定メソッドの連結のためのアウトレット、セッタが呼び出されます。 しかし このメカニズムは ない 利用のキー-値符号化されていIBOutletという名前を先頭に付けて員の方はログイ(例えば _myField
) ない 設定されない限り、セッターの名前とまったく同じように、アウトレット(例えば set_myField:
る非標準とす
また、それをまっていただいた皆様ありがとう self.myProp
は ない 同じアクセスのインスタンス変数.ご メッセージを送信する ご利用の際は、物件のように使用した場合にはブラケット記法のように [self myProp]
.すべての特性をいい簡潔な構文を指定するためのgetterおよびsetterでは単線、より合成を実施なんの短絡のメッセージを派遣。アクセスしたいならば、インスタンス変数は直接の接頭辞で self
必要な治療 self
としてのポインタのように、 self->myProp
るものがC-スタイル分野です。
最後に、利用ハンガリーの表記を書く時はココから逃れその他の接頭辞のように"f"および"m_"—このコードがついていることをしている人のない"get"にまで見ることにより容疑によるその他のココア開発者向けです。
一般的に、アドバイスに従ってみましょう、 符号化のためのガイドラインココア 文書の Appleト接続, その他の開発者がにおける構造問題への取り組みの理解コード、コードを広く募集するとともにすべてのココア機能を使用するランタイムます。
ここでは、ウィンドウコントローラのクラスが生んだを使って、条約:
// EmployeeWindowController.h
#import <AppKit/NSWindowController.h>
@interface EmployeeWindowController : NSWindowController {
@private
// model object this window is presenting
Employee *_employee;
// outlets connected to views in the window
IBOutlet NSTextField *nameField;
IBOutlet NSTextField *titleField;
}
- (id)initWithEmployee:(Employee *)employee;
@property(readwrite, retain) Employee *employee;
@end
// EmployeeWindowController.m
#import "EmployeeWindowController.h"
@implementation EmployeeWindowController
@synthesize employee = _employee;
- (id)initWithEmployee:(Employee *)employee {
if (self = [super initWithWindowNibName:@"Employee"]) {
_employee = [employee retain];
}
return self;
}
- (void)dealloc {
[_employee release];
[super dealloc];
}
- (void)windowDidLoad {
// populates the window's controls, not necessary if using bindings
[nameField setStringValue:self.employee.name];
[titleField setStringValue:self.employee.title];
}
@end
だれを使用していインスタンス変数を参照 Employee
直接自分 -init
や -dealloc
方法が、私が使っているのです。これは一般に良いパターン特性:みに触れ、元のインスタンス変数のプロパティinitializers、 -dealloc
, のgetterおよびsetter物件です。
他のヒント
追っていくクリス-ハンソンのアドバイスに関してはアンダースコアivar接頭辞が認めを使用して行いアンダースコアのためのIBOutletsしています。さしあたっては、近年の始動かした IBOutlet
宣言の @property
線、 @mmalcの提案.この利点はすべて私のivarsにてアンダースコア、標準KVCセッターと呼ばれる( setNameField:
).また、アウトレットの名前なくてマインターフェイスビルダを構築します。
@interface EmployeeWindowController : NSWindowController {
@private
// model object this window is presenting
Employee *_employee;
// outlets connected to views in the window
NSTextField *_nameField;
NSTextField *_titleField;
}
- (id)initWithEmployee:(Employee *)employee;
@property(readwrite, retain) Employee *employee;
@property(nonatomic, retain) IBOutlet NSTextField *nameField;
@property(nonatomic, retain) IBOutlet NSTextField *titleField;
@end
で利用できます員の方はログイprefixおivarsが非員の方はログの名前。のための合成accessors、い:
@synthesize foo = _foo;
これはコンパイラを合成foo用the_foo ivar.
書き込む場合はご自身のaccessors、あなただけの使員の方はログイivarに実装は非員の方はログメソッド名です。
個人としてのコ命名規則は、キャメルケーシングのための機能や変数、資本金のキャメルケーシングのためのオブジェクトの名前なしのNSました。
見たいタイプprefixingするコードにより不透明でなかった方に対して書き出来かねて使用する接頭辞によって、現代のIDEではその困難を図った。
の導入により物件を見なprefixing"_"クラスのインスタンス変数.しかしながら、セッションの簡単なルールに記載されたヘッダファイル)と変数にすることを目的とするもので外部のクラス経由でアクセスすることに、カスタム手法のクラスに影響す。このいうよりは有名に"_"でこだわった、フロントします。でも適切にカプセル化の価値観できるように制御をどのように変更してしまいます。
いを強調して接頭辞の他の識別子で、CとC++の両方の準備金一部のアンダースコアの接頭辞により使用を実施します。
と思いをします。変数"は、醜い.
一般に使っている川に挟まれた島に識別子は、接頭辞や接尾辞を持つ)のためのインスタンス変数.クラスアップした場合、のように複雑できませんのインスタンス変数を使います。なおばん"を使用rect"という名の通りインスタンス変数と"newRect"または"aRect"としてのパラメータの名前です。
アンドリュー:あんがたっぷりのココア開発者になインスタンス変数の接頭辞です。でも極めて普通のSmalltalk世界のいいと思うんでく前代未聞のSmalltalk用の接頭辞にインスタンス変数).
接頭辞にインスタンス変数は常に印象に残っていてC++-ismたるJavaおよびそのC#.以降、Objective-Cの世界が平行にC++の世界ていたのに対して、JavaとC#の世界で後継者で、その説明の"文化"が違いますが見ることのセット。
私のスタイルでハイブリッドやっホールドオーバーからヴ日:
最も役に立つプレフィックスを使用している"と"や"out"の機能-手法のパラメータこのことについてのパラメータのためのひもの紛争の間方法のパラメータやインスタンス変数(どのようになった今年のパラメータテーブル""紛争とインスタンス変数の同じ名)となります。E.g.:
- (void)doSomethingWith:(id)inSomeObject error:(NSError **)outError;
らかにしていきたいと考えている素の名前のインスタンス変数とプロパティ名:
らかにしていきたいと考えてい"、"接頭辞として地元の変数:theTable,theURL。ことの差別化の手助けと、インスタンス変数です。
以下のようにヴスタイリングを使用したいのほんの一握りのその他の接頭辞:kのための定数E enums、gのためのグローバル変数、sのための統計情報に
まとめこのスタイルのようなもの12年になります。
がんのアンダースコアの接頭ivars、loathe書 @synthesize
ラインでのすべての複製(寒暖の差が激しいので皆様も ドライ).作成したマクロの手助けになる仕事をこのコードの重複を減らすために.このような:
@synthesize employee = _employee;
書いています:
ddsynthesize(employee);
シンプルなマクロを使用トークンを貼り付けを追加するにはアンダースコアの右側:
#define ddsynthesize(_X_) @synthesize _X_ = _##_X_
の下振れするということが混同Xcodeのリファクタリングツールでなくと称した場合、名前の変更によりリファクタリング.
とうといわれているのはここで、必ずお読みくださいココア文書の重要な価値観察対応naming.に掲げ、このパターンの大きな力になるでしませんでした。