6

合成しないプロパティがあります。代わりに、ゲッターとセッターを自分で作成します。したがって、ARC キーワード (強いまたは弱い) は意味がないと思いますので、それらを削除します。これは Xcode 4.3 では問題なく動作しますが、同僚が XCode 4.2 でそれらを開くと、コンパイラは強い/弱いキーワードがないと文句を言うので、無意味にキーワードをもう一度入力するように指示しました。正しいのはどれですか (キーワードの有無)?

明確にするために:私はこのようなプロパティを持っており@property (nonatomic) NSString *foo、.mファイルに実装-(NSString *)foo-(void)setFoo:(NSString *)foo、含めません@synthesize foo。もう 1 つの関連する詳細は、対応する iVar がなく、代わりにプロパティが Core Data オブジェクトと相互作用することです。キーワードに strong または weak を追加しない限り、これは XCode 4.2 でコンパイルされません。

編集私はもう1つの関連することを考えました.これらのプロパティの1つはプロトコルにあります.それが違いを生むかどうかはわかりません.

4

2 に答える 2

1

参照している宣言済み属性はオプションです。ドキュメントを引用するには:

プロパティの宣言と実装
@property ディレクティブは、プロパティを宣言します。オプションの括弧で囲まれた属性のセットは、プロパティのストレージ セマンティクスとその他の動作に関する追加の詳細を提供します。可能な値については、「プロパティ宣言の属性」を参照してください。

プロパティ宣言の属性
フォームを使用して、プロパティを属性で修飾できます@property(attribute [, attribute2, ...])。メソッドと同様に、プロパティのスコープは、それを囲むインターフェイス宣言に限定されます。変数名のコンマ区切りリストを使用するプロパティ宣言の場合、プロパティ属性は名前付きプロパティのすべてに適用されます。

ディレクティブを使用し@synthesizeてアクセサー メソッドを作成するようコンパイラに指示する場合 (「プロパティの実装ディレクティブ」を参照)、生成されるコードは、キーワードによって指定された仕様と一致します。アクセサー メソッドを自分で実装する場合は、仕様に一致していることを確認する必要があります (たとえば、copy を指定する場合は、セッター メソッドで入力値をコピーする必要があります)。

@dynamic代わりに使用@synthesizeすると、独自のメソッドを作成することをコンパイラに伝え、適切なメソッドが見つからないときに不平を言うのを防ぎます。

詳細については、こちらをご覧ください

于 2012-04-05T22:22:00.947 に答える
0

ボアデン、

まず、なぜプロパティ ステートメントでメモリ ポリシーを省略したいのでしょうか。ポリシーが何であるかをクラスの消費者に通知します。彼らに知られたくないですか?

次に、@synthesize は nop ではありません。これは、言語が KVO をサポートするメカニズムです。現在は使用していないかもしれませんが、将来この使用を排除する理由は何ですか。

率直に言って、@property で完全な説明を使用したり、@synthesize を使用したりしないことで、IMO は時期尚早の最適化に取り組んでいます。現在の設計では、メッセージのディスパッチが保存されず、必要に応じて ivar の作成と入力を管理する必要があります。そして、言語の機能を失いつつあります。

推奨される Obj-C v2+ パターンの範囲外に出る正当な理由がなく、それらをリストしていない場合を除き、標準パターンの使用に戻ります。その後、問題は解決します。

アンドリュー

于 2012-04-05T15:41:09.530 に答える