您的位置:首页 > 移动开发 > IOS开发

ios类初始化以及版本适配

2014-05-29 10:29 609 查看
在看SMPageController源码的时候,发现如下代码

+ (void)initialize
{
NSString *reqSysVer = @"7.0";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending) {
_defaultStyleForSystemVersion = SMPageControlDefaultStyleModern;
} else {
_defaultStyleForSystemVersion = SMPageControlDefaultStyleClassic;
}
}

- (void)_initialize
{
_numberOfPages = 0;
_tapBehavior = SMPageControlTapBehaviorStep;

self.backgroundColor = [UIColor clearColor];

// If the app wasn't linked against iOS 7 or newer, always use the classic style
// otherwise, use the style of the current OS.
#ifdef __IPHONE_7_0
[self setStyleWithDefaults:_defaultStyleForSystemVersion];
#else
[self setStyleWithDefaults:SMPageControlDefaultStyleClassic];
#endif

_alignment = SMPageControlAlignmentCenter;
_verticalAlignment = SMPageControlVerticalAlignmentMiddle;

self.isAccessibilityElement = YES;
self.accessibilityTraits = UIAccessibilityTraitUpdatesFrequently;
self.accessibilityPageControl = [[UIPageControl alloc] init];
self.contentMode = UIViewContentModeRedraw;
}


发现了自己以前遗漏了的知识

首先是 +(void)initialize 方法

查看文档,解析如下

大概意思就是说在类初始化的时候会调用该方法

另一个就是怎样判断当前系统版本的方式

NSString *reqSysVer = @"7.0";
NSString *currSysVer = [[UIDevice currentDevice] systemVersion];
if ([currSysVer compare:reqSysVer options:NSNumericSearch] != NSOrderedAscending) {
_defaultStyleForSystemVersion = SMPageControlDefaultStyleModern;
} else {
_defaultStyleForSystemVersion = SMPageControlDefaultStyleClassic;
}
或者

if([[UIDevice currentDevice]systemVersion].floatValue < 7.0) {
//dosomething
}


最后一个就是下面这一段的宏定义了

#ifdef __IPHONE_7_0
[self setStyleWithDefaults:_defaultStyleForSystemVersion];
#else
[self setStyleWithDefaults:SMPageControlDefaultStyleClassic];
#endif


这段代码的作用是,当我们的basesdk(编译的sdk)是7.0的时候,就执行

_defaultStyleForSystemVersion = SMPageControlDefaultStyleModern;


否则执行

_defaultStyleForSystemVersion = SMPageControlDefaultStyleClassic;


那这和我们上面通过systemVersion的方法来获得系统版本的方法有什么不同呢,为什么不能替换呢?

首先我们新建一个工程,在AppDelegate.m里面添加下面一句简单的代码

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
self.window.tintColor = [UIColor redColor];
return YES;
}


然后我们看看项目的配置



项目部署环境是ios7.1



编译环境也是7.1

然后运行项目,一切是那么的正常

下面我们把项目的部署环境改为ios6.0,并且选择6.0的模拟器来运行





运行项目,项目报错



原因是在ios6里面,并没有setTintColor这个方法

因为是用7.1的环境编译的,编译的时候能找到改方法,但是到了6.0的运行环境是,由于6.0没有该方法,于是代码运行到那里的时候就报错了

看到这里你就应该知道上面为什么在这种情况下,不能用systemVersion来做判断了吧

参考文章:http://www.it165.net/pro/html/201403/10825.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: