2011-12-07 3 views
2

アップルが生成したテンプレートコードとドキュメントを読むと、_(アンダースコア)と__(ダブルアンダースコア)が表示されます。例は、コアデータオプションのチェック時に生成されるコードです。生成されたコードの先頭のアンダースコア

@synthesize window = _window; 
@synthesize managedObjectContext = __managedObjectContext; 
@synthesize managedObjectModel = __managedObjectModel; 
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator; 

これらの意味はそれぞれ何ですか?私は_が裏付専用変数を指していることを理解しています。 __は何を意味しますか?

+0

はそれだけだ、それはこのスレッドでは非常によく説明してきたhttp://stackoverflow.com/questions/5466496/why-rename-synthesized-properties-in-ios-with-leading-underscores –

+0

をゲス命名規約... __が何を言っているのかわからない、多分もっとプライベートな変数かもしれない。 – Felix

+0

ブルース・リー、私はそのリンクを見ました。二重のアンダースコア – Vinod

答えて

0

アップルのドキュメントでは、プロジェクトで単一のアンダースコアを使用しないことを推奨しています(Apple自身が予約しています:よく知られている例は_cmdです)。しかしアンダースコアは識別子のプライベート性のための伝統的なCスタイルの修飾子なので、ダブルアンダースコアは変数のプライベート識別子を作るための解決策です。

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingMethods.html

Cocoaフレームワークの中で最もプライベートメソッドの名前は、プライベートとしてそれらをマークする アンダースコアの接頭辞(例えば、_fooData)を持っています。 このことから、2つの推奨事項に従ってください。

Don’t use the underscore character as a prefix for your private methods. Apple reserves this convention. 
1

getter/setterメソッドを使用しているときと、直接ivarにアクセスしているときは、しばしば混乱します。

代わりに、ivarにはプロパティとは異なる名前が付けられます。

@implementation RootViewController 

@synthesize timestamp = _timestamp; 

@interface RootViewController : UITableViewController 
{ 
    NSDate *_timestamp; 
} 
@property (nonatomic, retain) NSDate *timestamp; 

をsythensize文は余分なオプションを取得します(名前が変更されていない)プロパティを接続するには - 一般的なアプローチはそうのような、アイバーズ名の前に付けるために、アンダースコアを使用することです本質的に、ObjectiveCプログラマが、この規約に従っているイーバールを宣言し、基本構文@synthesize _window;を使用する場合、プロパティの使用法はいくぶん醜いものになります:classInstance._window = myWindowまたは[classInstance set_window:myWindow]@synthesize window=_window;の構文を使用することにより、Obj-CプログラマはApple標準classInstance.window = myWindowおよび[classInstance setWindow:myWindow]を使用するプロパティアクセサを同時に使用して、よく使われるプログラミング標準(ivarsの前に_)を利用できます。

関連する問題