我有从iOS 6中引入的UIActivity
继承的代码,该代码可以使用Xcode 4.5进行编译,并且可以在iOS 6和早期版本上正常工作(我在运行时检测到该类的可用性)。但是,是否可以使用Xcode 4.4编译此代码,而Xcode 4.4在其SDK中不包含UIActivity
类?
如果我向前声明UIActivity,则dealloc
方法将不会编译,因为它会调用super
,并且编译器会警告我该类已经在继承树的根目录下。也许有一种方法可以使该类继承自我在本地定义的代理类,然后在运行时以某种方式混淆并实例化它,就像在编译时已正确定义它一样?这样做的目的是使用Xcode 4.4编译代码,并使用该幻象类使二进制文件在iOS 6上运行。
我知道我可以使用define来防止我的子类完全使用Xcode 4.4及更低版本进行编译,但这意味着该功能将无法在运行iOS 6的设备上使用。
最佳答案
@interface UIActivityDummy : NSObject
//Copy UIActivity methods to avoid compiler warnings
@end
@implementation UIActivityDummy
@end
@interface MyClass : UIActivityDummy
@end
@implementation MyClass
+ (void) initialize {
Class activityClass = objc_getClass("UIActivity");
if (activityClass) {
class_setSuperclass([MyClass class], activityClass);
}
NSLog(@"%@", [[MyClass class] superclass]);
}
@end