完全な初心者ではありませんが、私はiOSプログラミングとOjbective-Cを初めて使用します。私は主にC(DSP、マイクロコントローラー)、Delphi XE2/Pascal、Visual Basic、およびJava(デスクトップおよびAndroidアプリ)のバックグラウンドから来ています。
主にApressの「Beginning iOS 5 Development」という本でCocoaを学びました。
最近、私はWWDC 2012のビデオを見て、そのサンプルコードのいくつかを調べました。アプリを書く適切な方法、より具体的には@ property/@ synthesizeの言葉で混乱していると言わざるを得ません。
本では、サンプルコードのほとんど(すべてではない)を使用して、たとえばプロパティを定義します。
ViewController.h
@property (strong, nonatomic) NSMutableArray *list;
ViewController.m
@synthesize list;
次に、すべてのコードアクセスがリストを合成します
self.list
または単に
list
今、私が読んだすべてのWWDCコードサンプルでは、プログラマがプロパティを定義していることがわかりますが、.mファイルでは次のようなことをします
@synthesize list = _list;
そして時々アクセス
self.list
または
_list
私は混乱しています。正しい習慣は何ですか? As Appleプログラマーはすべてアンダースコアを使用します。私はそのようにするべきだと思いますが、なぜ本はそうしなかったのでしょうか?listと_listに違いはありますか?いつかself.listを使用し、時々list/_listを使用する理由。
@synthesizeを使用しないこともありますが、自分のアクセサーとミューテーターを書き直したいときだと思います(今まで私のケースではありません)。
私はWebをあちこち読んでいますが、心を正すほど明確なものは何もなかったので、StackOverflowを頼りにここに光を当てます。
最後になりましたが、私は現在のiOS 6のベストプラクティス/プログラミング手法に基づいて好みと回答をしています。古いiOSで正しく実行する方法を教えても無駄です。
正しい方法はありません。好みのスタイルのみがあります。
最新のコンパイラは、プロパティ宣言で暗黙的な合成を行います。
@synthesize list = _list;
。
コードには何も書かれていません。それはただ起こります。
ただし、明示的にこれを行うことを止めるわけではありません。
@synthesize list = somethingelse;
したがって、アクセサ(self.list
)を介してlist
へのポインタを要求すると、somethingelse
へのポインタが取得されます。
ほとんどの場合、NSMutableArray *thing = self.list
はNSMutableArray *thing = somethingelse
と同等です
そして、Appleがスタイルを使用しているからといって、それをしなければならないというわけではありません。各企業は通常、独自のコーディングスタイルを持っています。
@synthesize list;
の使用に関する主な問題は、次のいずれかを記述できるリスクがあることです。
self.list = thing
またはlist = thing
。
前者はsythesised setList:
アクセサーを使用しますが、後者は使用しないため、関連するバグのリスクをコードに入れますが、ARC
プロパティーではリークが発生しないので、strong
ほど悪くはありません。
どのスタイルを使用する場合でも、一貫性を保ち、ivarを直接使用した場合の効果に注意してくださいlist = thing
アクセサーself.list = thing
これは、過去数年間で使用が急速に進化した言語機能であり、さまざまな形式を説明しています。最新のツールを使用すると、@synthesize
を無視して合理的に機能させることができます。
その場合のデフォルトの動作は、@synthesize list = _list;
と同じ効果をもたらします。