0

我有继承自UIActivityiOS 6 中引入的代码,它可以使用 Xcode 4.5 编译罚款,并且在 iOS 6 和以前的版本上运行良好(我在运行时检测到类的可用性)。但是,是否可以使用 Xcode 4.4 编译此代码,它的 SDK中不包含该类?UIActivity

如果我转发声明 UIActivity 该dealloc方法不会编译,因为它调用super并且编译器警告我该类已经在继承树的根部。也许有一种方法可以让这个类从我在本地定义的代理类继承,然后在运行时以某种方式调整它并实例化它,就好像它在编译时已经正确定义了一样?这样做的目的是使用 Xcode 4.4 编译代码并使用该幻像类在 iOS 6 上运行二进制文件。

我知道我可以使用定义来阻止我的子类使用 Xcode 4.4 及更早版本进行编译,但这意味着该功能在运行 iOS 6 的设备上不可用。

4

2 回答 2

1
@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
于 2012-12-06T14:03:39.550 回答
0

在这里,我只是详细说明我们如何才能在运行时上课。希望它会是您所需要的。请检查一下。

只需使用:

objc_lookUpClass(myClass);// 它检查所需的类。objc_getClass(myClass);//这就是你需要的。

请检查语法,因为我不确定。但是,有一次我使用过它,并且还能够获取 ivar 和方法,并且还能够在运行时添加方法。

如有任何问题,请回复我。:)

于 2012-12-06T12:57:52.657 回答