基于iOS版本的不显眼的运行前定义的值

有没有什么办法来设置基于iOS版本的未caching的和接近 (如果不是完全的话)预定值的应用程序,而不必在运行时手动调用初始化代码?

我没有find一个解决scheme,要求我在应用程序运行时不断检查操作系统,或者在运行时通过AppDelegate进行调用来初始化一些全局variables。

您不能在编译时检查系统版本。 这些信息根本不存在。

您可以做的最好,因为您希望避免在应用程序运行过程中多次重新检查,因此在stream程生命周期的很早一些时间进行检查并存储该信息。 这对于您的应用程序委托可能是一个适当的任务。 当你得到application:didFinishLaunchingWithOptions: ,进行通常的运行时检查,并将结果提供给任何其他控制器需要它。 或者让每个关心的控制器在创build时进行检查。

实际上,虽然在加载了框架类之后 ,您也可以使用constructor属性创build一个函数,该属性将在main()之前运行得非常早。 这可以简单地使用系统版本初始化一个全局variables,然后您可以随时访问它。

使用@JoshCaswell的build议,我尝试了以下方法:

 static BOOL iOS6OrGreater; __attribute__((constructor)) static void iOS6OrGreaterInitialization(){iOS6OrGreater = [[[UIDevice currentDevice] systemVersion] compare:@"6.0" options:NSNumericSearch] != NSOrderedDescending;} static int MY_DEFINED_ENUM_NAME(){return (iOS6OrGreater) ? IOS6_OR_GREATER_ENUM : IOS5_OR_LESSER_ENUM;} 

但是我得到的'UITextAlignmentCenter' is deprecated: first deprecated in iOS 6.0警告'UITextAlignmentCenter' is deprecated: first deprecated in iOS 6.0