開發iOS 6和iphone5版本與之前版本差異總結 – iPhone手機開發技術文章 iPhone軟體開發教學課程

到目前為止也做瞭些對舊工程適配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?”;

 

目前適配工作還沒有做完,隻知道這些變化,往後發現瞭新的差異再陸續補充完整。

 

發佈留言