2

请原谅对编程术语的任何错误使用,我正在寻找 ios6 解决我的问题的方法:

我的头文件中有以下属性:

@property (nonatomic, strong) AClass *myExample;

但在我的 .m 文件中,我实际上可能希望 _myExample 是 AClass、BClass 或 CClass。

_myExample = [[BClass alloc] init]; // incompatible pointer types

实现这一点的最佳方法是什么

4

2 回答 2

5

AClass您可能会考虑BClass出您需要对所有三个.CCLassICDoSomethingProtocolid <NSObject, ICDoSomethingProtocol> myExampleAClass *

您可以跳过协议并继续使用,id <NSObject>但您将获得更少的编译时检查。

于 2013-03-03T22:50:19.890 回答
1

通常您应该创建 XClass 并创建 XClass 的 AClass、BClass 和 CClass 子类。然后使用@property (nonatomic, strong) XClass *myExample; 但是如果你“懒惰”(这不是编程罪),你可以使用 NSObject 的预退出类,或者简单地将属性声明为@property (nonatomic, strong) id myExample;. (请注意,没有*。)

在任何这些情况下,您都需要(或至少可能应该)在使用它之前将属性“转换”到正确的子类(调用超类的方法除外)。例如,int aValue = [(BClass*)self.myExample doSomeOperationOnBClass];

为了避免像这样进行强制转换(以及相关的混淆),简单地为三个类声明单独的属性并不罕见,即使三个类中的两个总是未使用。(同样,懒惰不是编程的罪过。)

于 2013-03-03T23:10:53.167 回答