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