本文設計的知識點已經是老生常談了,寫本文的目的僅僅是作個記錄加深印象(我不會告訴你其實是為了准備某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位在開發過程中需要主要哪些問題。
系統內置的數據類型占字節長度的對應參照如下:
可以發現它們的長度變化可能並非我們對64-bit長度加倍的預期,所以說,程序中出現sizeof的代碼多看兩眼。應該使用下面的類型代替基本類型:
數據類型隱式轉化導致的錯誤,如下:
NSArray *arr = @[@1,@2,@3];
for(int i=-1;i<arr.count;i++){
……
}
發現並沒有進入循環體,因為arr.count是NSUInteger類型,-1轉化成NSUInteger類型時變成一個巨大的數。本類和64bit沒有什麼本質的聯系,只是通過此類說明隱式轉化可能導致的錯誤。
編譯器已經默認禁用了這種使用,isa指針在32位下是Class的地址,但在64位下利用bits mask才能取出來真正的地址,若真需要,使用runtime的 object_getClass 和 object_setClass 方法。
最後列一下官方文檔中的注意點: