2012-01-19 1 views
-1

私はいくつかのチュートリアルを実行してきましたが、よくこのようなことがあります。 .hの構文help、なぜ変数の前に '_'を付けるのですか?

UIButton *_loginButton; 

@property (retain) IBOutlet UIButton *loginButton; 

が続い.Mで、それは何かのようになります...

@synthesize loginButton = _loginButton; 

は、だから私の質問は_の前に何の利益を置くんですか?なぜそれが一般的なプラクティスですか?最後に私もこれをやっているべきですか?

+1

可能な重複[here](http://stackoverflow.com/q/8545363/971401) –

+0

[ココアの目的 - cクラスの変数の前にあるアンダースコアはどうしますか?](http: /stackoverflow.com/q/822487/)およびhttp://stackoverflow.com/q/5582448/ http://stackoverflow.com/q/2371489/およびhttp://stackoverflow.com/q/5466496およびhttp: //stackoverflow.com/q/3521254/およびhttp://stackoverflow.com/q/7174277/ [中でも](http://stackoverflow.com/search?q=%5Bobjc%5D+synthesize+underscore&submit=サーチ)。 –

答えて

4

とローカル変数を書くために内部の要件があります。プライベートな関数やメソッドのために使用される先頭のアンダースコアを持つ名前が表示されることがあります。私が知る限り、Appleはその使用のためにこの条約を予約し、名前の衝突を避けるために使用しないことを推奨しています。そのため、先頭の文字の代わりに末尾に下線が付いた名前(_fooではなくfoo_)が表示されることがあります。

+0

+1。私は、アップルの "アンダースコア"を予約しているのは、Cの関数とほとんど同じだということです。先頭のアンダースコアはシステムプロバイダ(Cライブラリ)のために予約されています。二重下​​線はコンパイラのためのものです。だから私は個人的に後ろのアンダースコアを好む理由です。 – DarkDust

0

ローカル変数です。

一部の企業は、それは人々が時々プライベートインスタンス変数を表すために使用し、またはプロパティからインスタンス変数を分離するために、条約の_

+1

それだけではなく、企業のためです。時には、特にコンストラクタでは、関数に渡される変数との命名の競合が減ります。なぜ私のプライベート変数はすべて 'varaiableName_'という名前になっているのですか、単にプロパティを使うだけです。 –

0

これはどのバージョンから始まったのか分かりませんが、プロパティとして宣言するだけの場合は、実際の変数宣言を行う必要はありません。

// Interface 
@property (retain) IBOutlet UIButton *loginButton; 

// Implementation 
@synthesize loginButton 

そしてあなただけのプロパティを使用することができます。

loginButton = (....) 
self.loginButton = (...) 
[self setLoginButton:(...)] 
etc... 

、一つの方法または別の右ウェイは本当に個人的な好みに依存しているかどうか。このような場合は、通常、「常に一貫性を保ち、あなた(単独の開発者)またはあなたの会社/グループ/チームによって定められているコーディング標準に従う」)カテゴリに分類されます。

関連する問題