我有一组不同类的实例(准确地说是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.
我的问题是,可以实现这样的事情,还是我需要创建每个类的实例以防万一需要使用?
答案 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;
此外,请使用大写的名称。