你好,歡迎來到IOS教程網

 Ios教程網 >> IOS使用技巧 >> IOS技巧綜合 >> 64位系統下應用開發需要注意的那點事

64位系統下應用開發需要注意的那點事

編輯:IOS技巧綜合
[摘要]本文是對64位系統下應用開發需要注意的那點事的講解,對學習IOS蘋果軟件開發有所幫助,與大家分享。



本文設計的知識點已經是老生常談了,寫本文的目的僅僅是作個記錄加深印象(我不會告訴你其實是為了准備某iOS考試可能涉及的問題而復習,哈哈)。
2015年2月1日起,所有新ios應用開發必須支持64位架構,以充分利用CPU資源。蘋果自身”從硬到軟”的一系列產品均已全面支持64bit:iphone5S,iOS SDK8.0,xcode5.0.1等

32bit和64bit實際上是區分處理器的架構的,隨著科技的發展和對CPU高計算能力的需求,通過增加CPU地運算位寬擴展增加cpu和內存之間地位寬,從而讓系統支持更大容量地內存(32bit處理器最多只能支持內存容量只有4GB,而64bit地最高則達64GB)。更多可以參考:基於x86和JVM淺談32bit與64bit的區別。

這裡不去深入理解其硬件上的差別了,我們主要關注為支持64位在開發過程中需要主要哪些問題。

一、防范基礎類型的隱式轉換

系統內置的數據類型占字節長度的對應參照如下:
32bit-64bit compare



可以發現它們的長度變化可能並非我們對64-bit長度加倍的預期,所以說,程序中出現sizeof的代碼多看兩眼。應該使用下面的類型代替基本類型:

    int -> NSInteger unsigned -> NSUInteger float -> CGFloat 動畫時間 -> NSTimeInterval …

數據類型隱式轉化導致的錯誤,如下:

NSArray *arr = @[@1,@2,@3];
for(int i=-1;i<arr.count;i++){
    ……
}

發現並沒有進入循環體,因為arr.count是NSUInteger類型,-1轉化成NSUInteger類型時變成一個巨大的數。本類和64bit沒有什麼本質的聯系,只是通過此類說明隱式轉化可能導致的錯誤。

二、isa指針



編譯器已經默認禁用了這種使用,isa指針在32位下是Class的地址,但在64位下利用bits mask才能取出來真正的地址,若真需要,使用runtime的 object_getClass 和 object_setClass 方法。



最後列一下官方文檔中的注意點:

    不要將指針強轉成整數 程序各處使用統一的數據類型 對不同類型的整數做運算時一定要注意 需要定長變量時,使用如int32_t, int64_t這種定長類型 使用malloc時,不要寫死size 使用能同時適配兩個架構的格式化字符串 注意函數和函數指針(類型轉換和可變參數) 不要直接訪問Objective-C的指針(isa) 使用內建的同步原語(Primitives) 不要硬編碼虛存頁大小
    
  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved