仅在可用时导入类(例如,仅在> = 3.2的UIPopOverControllerDelegate)

时间:2011-09-23 12:18:11

标签: objective-c ios

我有一个实现UIPopOverControllerDelegate的类:

#if ios_atleast_32
@interface MyClass : UIViewController <UIPopoverDelegate>
#elsif
@interface MyClass : UIViewController
#endif

是否可以在运行时确定类是否可用,因此应该用作委托?进口相同:

#if ios_4_available
#import "MyClassWhichIsUsingIos4Stuff.h"
#endif

3 个答案:

答案 0 :(得分:4)

您正在构建最新的SDK,因此您始终可以#import新的东西,并且不需要任何预处理器宏。该协议也是如此。

请确保在使用所有受支持的操作系统版本不可用的类之前,检查该类是否存在或您的应用程序是否会崩溃:

Class someNewClass = NSClassFromString(@"SomeNewClass");
if (someNewClass) {
    ...
}
else {
    ...
}

在较新版本的SDK中(不要问我究竟是什么要求)你也可以这样做:

if ([SomeNewClass class]) {
    ...
}
else {
    ...
}

答案 1 :(得分:2)

无论在运行时使用哪个iOS版本,您都可以简单地实现协议,并且它可以正常工作。

答案 2 :(得分:0)

正如上面提到的那样,导入类没有问题 - 但是UIKit必须是弱链接的...这是我案例中的缺失点!