web-dev-qa-db-ja.com

インターフェイスタイプを静的に割り当てることはできませんか?

私はこれをビューオブジェクトのヘッダーファイルに入れようとしました:

@property (nonatomic) UIColor color;

このビューで線を描画する色を保存します。

Xcodeでは、次の行にエラーが表示されます。

インターフェイスタイプを静的に割り当てることはできません

それはどういう意味ですか、どうすればよいですか?

編集:

*を追加しましたが、合成の時点で次のように述べました。

ARCは、未指定の所有権またはストレージ属性を持つObjective Cオブジェクトのプロパティの合成を禁止していますか?

39
William Sham

変数はオブジェクト型用であり、ポインタとして宣言する必要があります。

@property (nonatomic) UIColor * color;    // Note the asterisk

この場合の「静的に割り当てられた」とは、そのオブジェクトのメモリがコンパイル時に割り当てられたことを意味します。ただし、Obj-Cのすべてのオブジェクトは実行時に割り当てられ、ポインターを介してアクセスされます。

「インターフェース型」は、コンパイラにとって意味のある技術的に過度の用語であり、ここではそれほど重要ではありません。これは、UIColorinterfaceを表し、コンパイラが変数colorと対話することを期待していることを意味します。指すオブジェクトの実際のタイプは異なる場合があります( class cluster like NSStringなど)。

75
Josh Caswell

問題は、次のように、ポインターを介した参照によってのみObjective-Cオブジェクトにアクセスできることです。

UIColor *color;

次のように、「裸の」オブジェクトを持つことはできません。

UIColor color;

そのため、解決策は、コードにアスタリスクを挿入することです(おそらくこれを行うつもりでしたが、バグは単なるタイプミスです)。

6
user23743

UIColorポインターをそのように宣言し、ARCまたはMRRのどちらを使用しているかに応じて、retain/strongを追加する必要があります。

@property (nonatomic, strong) UIColor *color;
5
Reed Olsen