在一个属性中存储任意数量的不同类

时间:2013-08-30 10:11:16

标签: objective-c class properties

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

我希望能够随时在这些不同的对象之间切换。有时可能只会使用少数几个对象,有时当它们全部被使用时,有时只使用一个对象。

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

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

ClassType3只是9个不同类别中的一个,在此示例中,它们从ClassType1转到ClassType9

但这不起作用,我得到了这两个警告:

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

我的问题是,可以实现这样的事情,还是我需要创建每个类的实例以防万一需要使用?

2 个答案:

答案 0 :(得分:9)

加布里埃尔已经给出了正确答案。然而, 如果所有类具有相同的方法和属性,则应考虑

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

    @property (nonatomic, strong) SuperClass * currentObj;
    
  • OR 定义@protocol,其中包含常用方法/属性,全部使用 类符合该协议,并将属性声明为

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

两种情况下的优点是编译器可以在何时执行更多/更好的错误检查 财产被分配或使用。

答案 1 :(得分:7)

id已经是指针。

更改

@property (nonatomic, strong) id * currentObj;

@property (nonatomic, strong) id currentObj;

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