2012-04-05 5 views
6

私は合成しないプロパティを持っていますが、代わりに自分でゲッタとセッタを作成します。したがって、ARCキーワード(強弱)は意味を持ちませんので、除外します。これはXcode 4.3ではうまくいきますが、同僚がXCode 4.2でそれらを開くと、コンパイラーはstrong/weakキーワードがないと不平を言うので、無意味にキーワードを入力するように指示しました。正しい(キーワードあり/なし)のどちらですか?合成しないプロパティにはARCキーワードが必要ですか?

明確にする:私は@property (nonatomic) NSString *fooのようなプロパティを持ち、.mファイルには-(NSString *)foo-(void)setFoo:(NSString *)fooを実装し、@synthesize fooは含めないでください。もう1つの関連する詳細は、対応するiVarが存在せず、その代わりにプロパティがコアデータオブジェクトと対話するということです。これは、XCode 4.2で強くまたは弱くキーワードを追加しない限りコンパイルされません。

EDIT私は、これらのプロパティの1つがプロトコル上にあると考えました。違いがあるかどうかは分かりません。

答えて

1

参照する宣言された属性はオプションです。 @propertyディレクティブは、プロパティを宣言し

プロパティの宣言と実装
:ドキュメントを引用します。オプションのカッコで囲まれた アトリビュートのセットは、ストレージに関するセマンティクスおよびその他の動作に関する詳細情報を提供します。可能な値については、「プロパティ宣言アトリビュート」を参照してください。

プロパティの宣言では、フォーム@property(attribute [, attribute2, ...])を使用して 属性を持つプロパティを飾ることができます
属性。 メソッドと同様に、プロパティは、囲みインタフェース 宣言にスコープされます。コンマ区切りリスト の変数名を使用するプロパティ宣言の場合、プロパティ属性はすべての名前付き プロパティに適用されます。あなたは(「プロパティの実装ディレクティブ」を参照) アクセサメソッドを作成するようにコンパイラに伝えるために@synthesizeディレクティブを使用している場合

、それが生成する コードは、キーワードによって与えられた仕様と一致します。 アクセサメソッドを自分で実装する場合は、 が仕様と一致していることを確認する必要があります(たとえば、copyを指定する場合は、 を入力する必要があります)。

あなたはそれはあなたがあなた自身のメソッドを記述し、それが適切な方法を見つけられないとき文句のを防止することになるコンパイラを語っている代わりに@synthesize@dynamicを使用している場合。

詳細情報はhereです。

+0

興味深い...私は動的を追加しようとし、XCode 4.2で動作するかどうかを確認します。 – borrrden

+1

+1、非常に明確な答え – jmstone617

0

borrrden、

まず、なぜあなたはあなたの財産文で、あなたのメモリポリシーをElideのために気にしていますか?それはあなたのクラスの消費者にポリシーが何であるかを知らせます。あなたは彼らに知らせたくありませんか?

第2に、@synthesizeはnopではありません。言語がKVOをサポートする仕組みです。あなたは今、それを使用していないかもしれませんが、なぜあなたは将来この使用を排除しますか?

@propertyで完全な説明を使用せず、@synthesizeを使用しないことで、あなたは早すぎる最適化に取り組んでいます。現在のデザインではメッセージのディスパッチが保存されず、必要に応じてivarsの作成と入力を管理する必要があります。そしてあなたはその言語の特徴を失っています。

好ましいObj-C v2 +パターンの範囲外に出てくる理由があり、それらをリストしていない場合は、標準パターンを使用することに戻ります。それから、あなたの問題は消え去ります。

アンドリュー

+0

独自のメソッドを書くのには、たいていの場合、十分な理由があります。 (計算されたプロパティ、バリデーションなどのように) – lnafziger

+0

'@ synthesize'はKVOとまったく関係がありません。独自のカスタムセッタとゲッタを提供しながら、 '@ synthesize'を書くことなくKVOを使うことができます。 –

+0

最適化についてではなく、論理に関するものです。これらのプロパティにはiVarsはありません。プロパティはCore Dataオブジェクトと相互作用し、プロパティを設定します。この場合、彼らは強くて弱いと思いますか?おそらく私が設定している後続のオブジェクトプロパティと同じでしょう。私は副作用を引き起こしていない限り、それらを書いても構いません。 – borrrden

関連する問題