有没有办法基于iOS版本为我的应用程序设置未缓存和几乎(如果不是完全的话)预定值,而无需在运行时手动调用初始化代码?
我不是在寻找一种解决方案,要求我在应用程序运行时不断检查操作系统,或者必须在运行时通过AppDelegate进行调用来初始化大量全局变量。
答案 0 :(得分:2)
您无法在编译时检查系统版本。这些信息根本不存在。
您可以做的最好,因为您希望避免在整个应用程序运行期间多次重新检查,请在流程生命周期的早期检查并存储该信息。这可能是您的应用程序委托的适当任务。获得application:didFinishLaunchingWithOptions:
时,请执行常规运行时检查,并将结果提供给其他控制器需要的结果。或者让每个关心的控制器在创建时进行检查。
您还可以使用constructor
属性创建一个函数,该函数将在main()
之前提前极运行,实际上,after framework classes have been loaded。这可以简单地使用您可以随时访问的系统版本初始化全局变量。
答案 1 :(得分:1)
使用@JoshCaswell的建议,我尝试了以下方式:
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
警告。