1

異なるクラス (正確には 9 つ) のインスタンスのコレクションがあり、すべて同じメソッドとプロパティを持ちますが、それぞれが特定のタスクを実行します。

これらの異なるオブジェクトをいつでも切り替えられるようにしたいと考えています。いくつかのオブジェクトのみが使用される場合もあれば、すべてが使用される場合もあれば、1 つだけが使用される場合もあります。

理想的には、これらのオブジェクトのいずれかのインスタンスを指す単一のプロパティが必要です。私はこのようなことをしてみました:

@property (nonatomic, strong) id * currentObj;
...
currentObj=[[ClassType3 alloc] init];

(ClassType3は 9 つの異なるクラスの 1 つにすぎません。この例では、からClassType1に移動しますClassType9)

しかし、それは機能しません。次の 2 つの警告が表示されます。

Property with 'retain (or strong)' attribute must be of object type.
Pointer to non-const type 'id' with no explicit ownership.

私の質問は、このようなことを達成できるか、または使用する必要がある場合に備えて各クラスのインスタンスを作成する必要があるかということです。

4

2 に答える 2

9

ガブリエレはすでに正しい答えを出しました。ただし、すべてのクラスが同一のメソッドとプロパティを持っている場合は、次のことを考慮する必要があります。

  • すべてのクラスが共通のスーパークラスから継承されるようにし、プロパティを次のように宣言します。

    @property (nonatomic, strong) SuperClass * currentObj;
    
  • または@protocol、共通のメソッド/プロパティを構成する を定義し、すべてのクラスをそのプロトコルに準拠させ、プロパティを次のように宣言します。

    @property (nonatomic, strong) id <YourProtocol> currentObj;
    

どちらの場合も、プロパティが割り当てられているか使用されているときに、コンパイラがより多くの/より良いエラー チェックを実行できるという利点があります。

于 2013-08-30T10:23:32.303 に答える