關(guān)于iOS應(yīng)用,其實(shí)蘋果很早就就發(fā)布消息:2015年的2月開始,提交App Store的應(yīng)用必須支持64-bit。而Apple在iPhone 5s 就已經(jīng)搭配64位雙核蘋果A7處理器。還是在15年6月,蘋果App Store中所有應(yīng)用更新都必須支持64bit。
但這對(duì)于企業(yè)級(jí)應(yīng)用來說,并不能限制應(yīng)用去支持64bit,因?yàn)槠髽I(yè)級(jí)應(yīng)用不必提交App Store審核。但Apple又有了新的對(duì)策:在iOS 10.1測(cè)試版中加入了一項(xiàng)提示,如果用戶下載的是一個(gè)32位應(yīng)用,系統(tǒng)會(huì)提示“XXX”可能使iPhone變慢,應(yīng)用開發(fā)者需要更新此應(yīng)用以改進(jìn)其兼容性。
現(xiàn)在看來Apple這種方式,可算是最有效的方式了,因?yàn)檫@樣會(huì)直接導(dǎo)致用戶對(duì)一個(gè)應(yīng)用的不同態(tài)度。甚至是不止降低用戶量。如果是企業(yè)級(jí)用戶,可以直接引起用戶的強(qiáng)烈不滿。
不管怎么說,作為一個(gè)iOS開發(fā)者,既然Apple已經(jīng)提出,還是要去支持64-bit。
具體做法:
關(guān)于Xcode “Build Setting”
中的Architectures
參數(shù)問題:
Architectures
:你想支持的指令集。(支持指令集是通過編譯生成對(duì)應(yīng)的二進(jìn)制數(shù)據(jù)包實(shí)現(xiàn)的,如果支持的指令集數(shù)目有多個(gè),就會(huì)編譯出包含多個(gè)指令集代碼的數(shù)據(jù)包,造成最終編譯的包很大。)Valid architectures
:即將編譯的指令集。(Valid architectures
和Architecture
兩個(gè)集合的交集為最終編譯生成的版本)Build Active Architecture Only
:是否只編譯當(dāng)前設(shè)備適用的指令集(如果這個(gè)參數(shù)設(shè)為YES,使用iPhone 6調(diào)試,那么最終生成的一個(gè)支持ARM64指令集的Binary。一般在DEBUG模式下設(shè)為YES,RELEASE設(shè)為NO)
對(duì)于支持64-bit,我們可以設(shè)置Architectures
為 Standard architectures
,它包括 armv7、armv7s 和 arm64
。
而是對(duì)于代碼中的改變其實(shí)也就分為:數(shù)據(jù)類型和方法調(diào)用 兩個(gè)部分。
比如:int -> NSInteger
以及得到數(shù)組個(gè)數(shù)的方法:[dataArray count] -> dataArray.count
這是關(guān)于數(shù)據(jù)類型改變的總結(jié):
上圖所說:
- 避免將長整型long賦值給整型int (64-bit上會(huì)導(dǎo)致數(shù)據(jù)丟失)
- 避免將指針類型pointer賦值給整型int (64-bit導(dǎo)致地址數(shù)據(jù)丟失)。
- 留意數(shù)值計(jì)算,避免指針和長整型在運(yùn)算上的截?cái)鄦栴}(掩碼計(jì)算,無符號(hào)整數(shù)和有符號(hào)整數(shù)同時(shí)使用等)。
- 留意對(duì)齊方法帶來的變化。
- 32-bit到64-bit之間數(shù)據(jù)轉(zhuǎn)化(通過網(wǎng)絡(luò)傳遞的用戶數(shù)據(jù),可能同時(shí)存在于32-bit和64-bit的環(huán)境下)。
- 重寫匯編代碼,讓你的代碼使用新的64-bit操作碼和運(yùn)行時(shí)。
- 不要在可變參數(shù)方法和不可變參數(shù)方法之前進(jìn)行強(qiáng)制轉(zhuǎn)化。
具體可以看:《64-Bit Transition Guide for Cocoa Touch》
關(guān)于iOS應(yīng)用支持64位的一些詳情,可以看看這篇不錯(cuò)的文章:
《iOS應(yīng)用如何實(shí)現(xiàn)64位的支持》