關于iOS應用,其實蘋果很早就就發(fā)布消息:2015年的2月開始,提交App Store的應用必須支持64-bit。而Apple在iPhone 5s 就已經搭配64位雙核蘋果A7處理器。還是在15年6月,蘋果App Store中所有應用更新都必須支持64bit。
但這對于企業(yè)級應用來說,并不能限制應用去支持64bit,因為企業(yè)級應用不必提交App Store審核。但Apple又有了新的對策:在iOS 10.1測試版中加入了一項提示,如果用戶下載的是一個32位應用,系統(tǒng)會提示“XXX”可能使iPhone變慢,應用開發(fā)者需要更新此應用以改進其兼容性。

現在看來Apple這種方式,可算是最有效的方式了,因為這樣會直接導致用戶對一個應用的不同態(tài)度。甚至是不止降低用戶量。如果是企業(yè)級用戶,可以直接引起用戶的強烈不滿。
不管怎么說,作為一個iOS開發(fā)者,既然Apple已經提出,還是要去支持64-bit。
具體做法:

關于Xcode “Build Setting”中的Architectures參數問題:
Architectures:你想支持的指令集。(支持指令集是通過編譯生成對應的二進制數據包實現的,如果支持的指令集數目有多個,就會編譯出包含多個指令集代碼的數據包,造成最終編譯的包很大。)Valid architectures:即將編譯的指令集。(Valid architectures和Architecture兩個集合的交集為最終編譯生成的版本)Build Active Architecture Only:是否只編譯當前設備適用的指令集(如果這個參數設為YES,使用iPhone 6調試,那么最終生成的一個支持ARM64指令集的Binary。一般在DEBUG模式下設為YES,RELEASE設為NO)
對于支持64-bit,我們可以設置Architectures為 Standard architectures,它包括 armv7、armv7s 和 arm64。
而是對于代碼中的改變其實也就分為:數據類型和方法調用 兩個部分。
比如:int -> NSInteger
以及得到數組個數的方法:[dataArray count] -> dataArray.count
這是關于數據類型改變的總結:

上圖所說:
- 避免將長整型long賦值給整型int (64-bit上會導致數據丟失)
- 避免將指針類型pointer賦值給整型int (64-bit導致地址數據丟失)。
- 留意數值計算,避免指針和長整型在運算上的截斷問題(掩碼計算,無符號整數和有符號整數同時使用等)。
- 留意對齊方法帶來的變化。
- 32-bit到64-bit之間數據轉化(通過網絡傳遞的用戶數據,可能同時存在于32-bit和64-bit的環(huán)境下)。
- 重寫匯編代碼,讓你的代碼使用新的64-bit操作碼和運行時。
- 不要在可變參數方法和不可變參數方法之前進行強制轉化。
具體可以看:《64-Bit Transition Guide for Cocoa Touch》
關于iOS應用支持64位的一些詳情,可以看看這篇不錯的文章:
《iOS應用如何實現64位的支持》