Jim*_*ery 1 properties class objective-c
我有一组不同类的实例(准确地说是9个),它们都具有相同的方法和属性,但每个都执行特定的任务.
我希望能够在任何时候在这些不同的对象之间切换.有时可能只使用少数几个对象,有时候当它们都被使用时,有时候只使用一个.
理想情况下,我想要一个可以指向任何这些对象的实例的单个属性.我尝试过这样的事情:
@property (nonatomic, strong) id * currentObj;
...
currentObj=[[ClassType3 alloc] init];
Run Code Online (Sandbox Code Playgroud)
(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.
Run Code Online (Sandbox Code Playgroud)
我的问题是,可以实现这样的事情,还是我需要创建每个类的实例以防万一需要使用它?
加布里埃尔已经给出了正确答案.但是,如果所有类具有相同的方法和属性,则应考虑使用
使所有类继承自公共超类,并将该属性声明为
@property (nonatomic, strong) SuperClass * currentObj;
Run Code Online (Sandbox Code Playgroud)或者定义一个@protocol包含公共方法/属性的,使所有类符合该协议,并将该属性声明为
@property (nonatomic, strong) id <YourProtocol> currentObj;
Run Code Online (Sandbox Code Playgroud)两种情况下的优点是编译器可以在分配或使用属性时执行更多/更好的错误检查.
id 已经是一个指针.
更改
@property (nonatomic, strong) id * currentObj;
Run Code Online (Sandbox Code Playgroud)
至
@property (nonatomic, strong) id currentObj;
Run Code Online (Sandbox Code Playgroud)
此外,请使用大写的名称.