我有从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

08-16 05:36