1

我有一组不同类的实例(准确地说是 9 个),它们都具有相同的方法和属性,但每个都执行特定的任务。

我希望能够随时在这些不同的对象之间切换。有时可能只有少数对象被使用,有时它们都被使用,而其他时候只使用一个。

理想情况下,我想要一个可以指向任何这些对象的实例的属性。我试过做这样的事情:

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

ClassType3只是 9 个不同的类之一,在这个例子中,它们从ClassType1ClassType9

但这不起作用,我收到以下两个警告:

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

Gabriele已经给出了正确的答案。但是,如果所有类都具有相同的方法和属性,则应考虑

  • 使所有类都继承自一个公共超类,并将属性声明为

    @property (nonatomic, strong) SuperClass * currentObj;
    
  • 或者定义一个@protocol包含公共方法/属性的,使所有类都符合该协议,并将属性声明为

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

这两种情况的优点是编译器可以在分配或使用属性时进行更多/更好的错误检查。

于 2013-08-30T10:23:32.303 回答
7

id已经是一个指针。

改变

@property (nonatomic, strong) id * currentObj;

@property (nonatomic, strong) id currentObj;

此外,请使用大写的类名。

于 2013-08-30T10:16:14.927 回答