请原谅编程术语的任何错误使用,我正在为我的问题寻找ios6解决方案:
我的头文件中有属性:
@property (nonatomic, strong) AClass *myExample;
但在我的.m文件中,我实际上可能希望_myExample为AClass,BClass或CClass。
_myExample = [[BClass alloc] init]; // incompatible pointer types
实施此
的最佳方式是什么?答案 0 :(得分:5)
您可能会将AClass
,BClass
和CCLass
中的所有三个问题想象成一个协议,比如ICDoSomethingProtocol
,然后声明属性为id <NSObject, ICDoSomethingProtocol> myExample
而不是AClass *
。
您可以跳过协议,只需使用id <NSObject>
,但您可以减少编译时检查。
答案 1 :(得分:1)
通常,您应该创建XClass并生成XClass的AClass,BClass和CClass子类。然后使用@property (nonatomic, strong) XClass *myExample;
但是如果你是“懒惰”(这不是编程罪)你可以使用NSObject的预先退出类,或者只是将属性声明为@property (nonatomic, strong) id myExample;
。 (请注意,没有*
。)
在任何这些情况下,您需要(或至少可能应该)在使用它之前将该属性“强制转换”为正确的子类(除了调用超类的方法之外)。例如,int aValue = [(BClass*)self.myExample doSomeOperationOnBClass];
。
为了避免像这样抛出(以及相关的混淆),简单地为三个类声明单独的属性并不罕见,即使这三个类中的两个总是未使用。 (同样,懒惰不是编程罪。)