2013-07-05 35 views
5

Xcodeが自動的にプロパティを処理するにもかかわらず、@synthesizeを使用する必要があるかどうかは不思議です。あるいは、私たちは@synthesizeの使用をやめることができます(インスタンス変数に別の名前を付ける理由がない限り)?@synthesizeをまだ使用する必要がありますか?

私はちょうど専門的な立場から、私は良いコーディング慣習に準拠していることを確認したいと思います。

+2

これは本当に回答可能な質問ではないと思います。個人的には、私は(まだいくつかのケースがありますが)、また、これを検出するために警告が表示されなければ、 '@ synthesize'を使用しません。余分なコードは役に立ちません。 –

+0

だから@StevenFisher、私が理解すれば、それは単なる個人的な好みの問題ですか? – ngoue

+0

私はそう思いますか?つまり、何らかの理由でオプションになったということです。私は本当にあなたがする必要がある場合を除いてそれを使用をやめるべきだと思います。 「すべてのものにはあらゆる種類の無駄なものが含まれていますが、私はこれもその一つだと思います。 –

答えて

9

ようにそれを含める必要があります。私が現在開発中のiOS 6は、コンパイル時に@synthesizeを自動的に含むXcodeの新しいバージョンが必要なためです。古いコードでこれを行う場合、私の組織の中に、Xcodeの古いバージョン(バージョン4.2)を使用している人がいるかもしれません。

Xcodeの旧バージョンとの互換性が必要かどうかによって、この回答は異なります。しかし、Xcodeの新しいバージョンで作業する必要がある場合は、@synthesizeと宣言しても問題ありません。

+0

それは理にかなっています。だから、それは新しいバージョンのためにオプションにされている間、プロの設定では、私はちょうどそれを複数の人々が動作するように互換性を持たせる必要がありますか? – ngoue

+0

本当に、これらの人は最新のXcodeも使用しているはずです。 :)あなたがオープンソースライブラリを構築しているなら、互換性を保つことを正当化することができますが、そうではありません。 –

+1

誰かがまだXcodeの古いバージョンを使用していない限り、誰にでも互換性を持たせる必要はありません。 '@ synthesize'を省略すると、古いバージョンのXcodeは' @ property'が合成されていないことを示すコンパイルエラーを引き起こします。古いバージョンのXcodeをサポートする必要がない限り、 '@ synthesize'を使用する理由はほとんどありません。 – Stunner

1

あなたのivarが_propertyNameで合成されているのであれば、安全にsynthesize文を削除できます。あなたのIVARは何か他のものを命名することにしたい場合は、私が個人的にはもう(以下lnafzigerさんのコメントを参照してください)を必要なだけない限り新開発のための合成に使用しないので、

@synthesize propertyName = ________cool_ivar_name 
2

あなたの質問に直接答えるには、@synthesizeをスキップすることは専門家ではないと私は思う。あなたがそれを何らかの理由で必要としないと仮定すると(私はそれについて話します)、私は、より洗練されていないコードを書く方が専門的だと思います。 @synthesizeはちょうどノイズです。

あなたはそれを検討するかもしれないいくつかの例があります:

  1. あなたが古い(32ビットOS用X)との互換性ランタイム、またはiOSの古いバージョン(4.0済み)が必要です。

    注:32ビットのOS Xについて気になるかもしれませんが、Appleが4.0より前のiOSをターゲットとしたアプリケーションを受け入れることさえ確かではありません。確かに、あなたは本当に自分自身を制限するつもりです。

  2. あなたの製品は、他の開発者が古いバージョンのXcodeで使用できるようにしたいソースライブラリです。
  3. Xcodeの古いバージョン(4.4以前)を使用する必要があります。
  4. あなたは@synthesizeが必要な言語で大文字と小文字を区別しました。 (少なくとも1つのケースがカテゴリに関連しています。)これをヒットした場合、@synthesizeは1つの変数と移動します。戻ってはならず、@synthesizeすべて。
-Weverythingを有効にすると、これに関するコンパイラの警告が表示されます。 -Weverythingにはすべてのものが含まれています。これはその一つです。適切な警告スイッチを見つけて、それを元に戻します(警告メッセージにあります)。:)

も参照してください:

+0

私はこのことについて多くの人が話しているのを見ました。 " - すべて" ...私のために何ができるのか説明できますか? – ngoue

+0

'-Weverything'はコンパイラのすべての警告をオンにするだけでなく、追加されたすべての警告をオンにするコンパイラフラグです(他のCコンパイラでは)。コンパイラの警告に関する問題は、伝統的に、それらをオンにする必要があることです。 '-Weverything'をオンにすると、彼らはすべて解雇され、あなたはあなたがオフにしたいものを決定するようになります。しかし、あなたは間違いなくそれらのすべてをコード化したくありません。それらのうちのいくつかは、ペタンティックを超えており、実際には有害に迷い込んでいます。あなたが消したいいくつかの警告。 –

1

本当にこれには全体的な正解はありません。他の回答で指定されている特定の技術的理由(例えば、別のivar名をプロパティに結びつけるなど)以外にも、コードとの一貫性を保つことが最も重要だと感じています。 @synthesizeを使用している旧式の図書館に寄稿している場合は、一貫性のある名前で貼り付けてください。それ以外の場合は、新たに開始し、あまり控えめな方法で撮影する場合は、可能な限り@synthesizeを省略してください。個人的には冗長なコードはあまり好きではありませんが、コードの整合性はやや高いです。

関連する問題