20

を持つプロパティを合成禁じ:ARCは、私が <p>、</p> <pre><code>@property (nonatomic) UIColor *color; </code></pre>を<code>UIColor</code>の<code>@property</code>を作成しましたし、私はそれを合成しようとした不特定多数所有権またはストレージ

@synthesize color = _color; 

が、私はエラーが表示されます。

ARC forbids synthesizing a property of Objective-C object with unspecified ownership or storage attribute

これは何を意味しますか?

私がしようとしているのは、色を変更するUIColorオブジェクトのプロパティを作成することです。

+0

完全なクラス宣言と実装が必要な場合があります。あなたが手動で 'copy'と指定しなければならないブロックでない限り、プロパティーのデフォルトの記憶域は強くなります。 –

答えて

37

変更にあなたのプロパティ宣言:

@property (nonatomic,strong) UIColor *color;

はそのためARCは、それを保持する必要がある知っています。これはARCの前にstrongなしでコンパイルされていましたが、デフォルト値はassignであり、他の場所に保持されていない限り、色はリリースされていたので危険です。

ARCについてWWDC2011のビデオをお勧めします。

+8

プロパティがブロックの場合には、 'copy'と明示的に言及する必要がある場合を除き、これは必須ではありません。だから問題は別のものです。 –

+0

@VikramRao、この質問は2.5歳です。それが尋ねられた時点で、合成クラスのプロパティを宣言する必要がありました。デフォルトは 'assign'でした。 – Brian

+1

@Brianとにかく、受け入れられた答えを更新するのは良いでしょう。それを知らないこれらの開発者は、明示的に書く必要があると考えるかもしれません。今のところ、このエラーは主にブロックで示されています。ブロックは 'copy'である必要があります。オブジェクトはデフォルトで '強い'で、 'BOOL'、' NSInteger'などのプリミティブ型 - 'assign'であり、オブジェクト/プリミティブ型では誰もこのエラーを見ることはできません。 – Vive

4

プロパティの宣言(nonatomicの横)には、strongまたはweakのいずれかのストレージを指定する必要があります。

+0

それは私がオブジェクトへのポインタのために常にしなければならないことですか? –

+1

はい、メモリ管理の方法を指定する必要があります。 – JoePasq

+1

@WilliamShamあなたはすべてのポインタに対して、プロパティに対してのみ行う必要はありません。ローカルスコープ内のポインタは、デフォルトでは強力な参照ですが、__weakを使用して弱い参照としてポインタを扱うようにARCに指示することができます。 – Kekoa

関連する問題

 関連する問題