到目前為止也做瞭些對舊工程適配ios6和iphone5的工作,總結瞭一些東西:
1.開發iphone5和ios6版本最低需要使用xcode4.5,而xcode4.5不再支持armv6即:iOS4.3.3以下的系統.
不被支持的硬件設備包括:iPod 2nd gen, iPhone 3G 或更老的iPhone
例如我打包時的錯誤提示就是:
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、通訊錄列表獲取差異 www.aiwalls.com
這個可以參考我博客裡面寫的一篇文章“iOS6.0下獲取通訊錄用戶列表”;
9.由於ios6中,把viewDidUnLoad這個函數給撤銷瞭,那麼收到內存警告應該怎麼辦?
這個可以參考我博客裡面寫的一篇文章“官方ViewController programming guide 上面說的,
在iOS6以後要這樣幹: Really?”;
目前適配工作還沒有做完,隻知道這些變化,往後發現瞭新的差異再陸續補充完整。