开发iOS 6和iphone5版本与之前版本差异总结

到目前为止也做了些对旧工程适配ios6和iphone5的工作,总结了一些东西:


1.开发iphone5和ios6版本最低需要使用xcode4.5,而xcode4.5不再支持armv6即:iOS4.3.3以下的系统.

Xcode 4的Architectures设置默认只有armv7,也就是iOS设备,包括iPhone 3GS、iPhone 4、iPhone 4s、iPad、iPad 2等,而iPhone、iPhone 3G、iPod Touch、iPod Touch 2属于armv6架构。

例如我打包时的错误提示就是:

warning: iOS deployment targets lower than 4.3 are not supported (current 

IPHONEOS_DEPLOYMENT_TARGET = "4.0", ARCHS = "armv7").

(null):  iPhone/iPod Touch: application executable is missing a required 

architecture.  At least one 

of the following architecture(s) must be 

present: armv6 (-19033)




2.适配4英寸屏幕适配

旧应用要与4英寸屏幕进行适配,需要创建一张Default-568h@2x.png图片,系统根据是否有此资源来识别是否

支持4英寸屏幕。至于其他资源不允许使用xxx-568h.jpg此格式来适配屏幕,需要使用代码对屏幕进行检测来分别

进行适配。

一般用于判断iphone5的代码:

#define iPhone5 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(640,1136), [[UIScreen mainScreen] currentMode].size) : NO)

#define iPhone5_0 ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? CGSizeEqualToSize(CGSizeMake(320,568), [[UIScreen mainScreen] currentMode].size) : NO)

为什么要写2个呢,这并不是没有作用的,如果代码写界面的话,在iPhone5下View的高是568,也就是判断的时候

用的宏是第二个,最好是把这2个宏写在项目的XXX-Prefix.pch这个文件里面。


3.ios6转屏问题,控制视图的旋转

这个可以参考我博客里面写的一篇文章“旧工程适配ios6和iphone5 之 适配ios6转屏”;


4.UINavigationViewController的变化

开发过程中发现的,该类的initWithRootViewController在之前的版本是最终会调用到init方法的。

因此在继承UINavigationViewController时,直接在重写init方法来初始化对象所需属性即可。

但是在iOS6上是不会调用init方法,因此需要开发者们注意。


5.CFRelease的变化

在之前版本中如果CFRelease传入nil是被允许的,这也符合我们传入nil对象不会对我们的程序造成影响,但是在iOS6中,

这样的写法程序就

直接把你的程序Crash掉了,所以代码中还是需要判断一下是否为nil才是安全的做法。


6.UIPickerView的变化

在之前版本中调用[_pickerView selectRow:-1 inComponent:0 animated:YES];是允许的。但在

iOS6中会导致崩溃。


7.UIActivityIndicatorView的变化

在之前的版本中假如调用了startAnimating方法之后,只要把UIActivityIndicatorView添加到子视图中

就会显示加载动画,但在iOS6只要移出显示队列则会停止动画,特别在UITableViewCell中加入此控件,

只要滚动几下

Cell的

UIActivityIndicatorView就消失了,

为解决此问题可以在加入显示队列时根据

isAnimating属性来判断是否执行动画,

如果没有则重新调用一下startAnimating方法。

for (UIView *_curView in cell.subviews) {

      if ([_curView isKindOfClass:[UIActivityIndicatorView class]]) {
        [(UIActivityIndicatorView *)_curView startAnimating];
        break;
      }
    }



8、通讯录列表获取差异

这个可以参考我博客里面写的一篇文章“iOS6.0下获取通讯录用户列表”;


9.由于ios6中,把viewDidUnLoad这个函数给撤销了,那么收到内存警告应该怎么办?

这个可以参考我博客里面写的一篇文章“官方ViewController programming guide 上面说的,

在iOS6以后要这样干: Really?”;


10.ios6中,关于中文输入法的键盘有点变化

以前是一切换到中文输入法,那个备选栏就会出来,所以大家监视键盘用的就是

UIKeyboardWillShowNotification和UIKeyboardWillHideNotification,但是现在是打了字才出那个备选栏

的,所以就不能用这个通知了,应该使用UIKeyboardDidChangeFrameNotification。

目前适配工作还没有做完,只知道这些变化,往后发现了新的差异再陆续补充完整。


  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值