杜紀(jì)魁
(無錫商業(yè)職業(yè)技術(shù)學(xué)院 物聯(lián)網(wǎng)技術(shù)學(xué)院,江蘇無錫 214153)
美國太平洋時(shí)間2013年9月10日上午10點(diǎn),北京時(shí)間2013年9月11日凌晨1點(diǎn),蘋果在美國加州總部召開新品發(fā)布會(huì)。本次發(fā)布會(huì)上,正式發(fā)布iPhone5c和iPhone5s。iPhone5s于9月20日開賣,首批開賣的國家共有九個(gè)包括美國、澳大利亞、加拿大、中國(包括香港)、法國、德國、日本、新加坡、英國,而中國首次被蘋果列為首批iPhone開賣的國家。
iPhone5s最大的變化是A7的處理器+M7運(yùn)動(dòng)協(xié)處理器,A7是全球首款被用于智能手機(jī)上的ARM架構(gòu)64位處理器,CPU/GPU性能均比iPhone 5的A6快2倍,CPU性能是初代iPhone的40倍,GPU性能則是初代的56倍[1]。 菲爾·席勒在發(fā)布會(huì)上表示:“這是有史以來第一個(gè)移動(dòng)端64位處理器,其他人甚至還沒有開始討論64位處理器。增加的寄存器,讓A7的計(jì)算更有效率,顯著提高編碼和解碼一類計(jì)算任務(wù)的表現(xiàn)。同時(shí),更高的時(shí)鐘速度和改進(jìn)的GPU將使新的iPhone 5S產(chǎn)生質(zhì)的飛躍。但是64位處理會(huì)消耗更多的內(nèi)存。[2]新平臺(tái)的投入也使這個(gè)平臺(tái)的開發(fā)與老平臺(tái)應(yīng)用的升級(jí)擺在了開發(fā)者面前。
iOS是由蘋果公司為iPhone、iPad等移動(dòng)設(shè)備開發(fā)的操作系統(tǒng),2010年6月更名為iOS。iOS的系統(tǒng)架構(gòu)分為四個(gè)層次:核心操作系統(tǒng)層,核心服務(wù)層,媒體層,可輕觸層。應(yīng)用程序由Objective-C語言開發(fā)。
想要開發(fā)一個(gè)IOS應(yīng)用,就必須用到iOS軟件開發(fā)套件(SDK)以及蘋果公司的集成式開發(fā)環(huán)境(IDE)Xcode,這些在蘋果開發(fā)者官方網(wǎng)站可以直接下載(https://developer.apple.com/ios7/)。Xcode有源代碼編輯器、圖形用戶界面編輯器以及其他多種功能,從可定制構(gòu)建到源代碼倉庫管理等。Xcode采用單窗口的形式,并將這種形式稱為“工作區(qū)窗口”,所需要的大部分?jǐn)?shù)據(jù)都在這個(gè)工作區(qū)窗口里面。熟悉Xcode以后,你就能輕松地在編寫代碼、除錯(cuò)調(diào)試和界面設(shè)計(jì)中變換,而無需來回切換窗口。iOS SDK則能夠擴(kuò)展Xcode工具組,內(nèi)容包括創(chuàng)建iOS應(yīng)用專門的工具、編譯器和框架等。Xcode提供了一系列用來管理整個(gè)開發(fā)流程的工具,從創(chuàng)建應(yīng)用到測(cè)試、優(yōu)化應(yīng)用,直至上傳應(yīng)用到App Store。
當(dāng)然,最好的開發(fā)套裝就是裝著Mac ox的Mac蘋果電腦,Xcode開發(fā)工具,iOS SDK。
所有iOS應(yīng)用的背后都運(yùn)行著Objective-C這個(gè)面向?qū)ο笳Z言。Objective-C是C語言的一個(gè)超集,也就是說我們可以在項(xiàng)目中同時(shí)使用C語言和Objective-C語言,但是要構(gòu)建iOS應(yīng)用必須依靠Objective-C。從這個(gè)地方可以看出,在基本語法上,iOS的開發(fā)和32位PC應(yīng)用程序開發(fā)沒有本質(zhì)不同,當(dāng)然,程序架構(gòu)模式上是有區(qū)別的。
A7使用的是ARM V8架構(gòu),除了使用64位的地址總線和64位的寄存器以外,還增加了寄存器的數(shù)量,目前A7中的整數(shù)和浮點(diǎn)數(shù)寄存器是A6的兩倍。
寄存器的增加大大提高了程序的運(yùn)行速度。將CPU由32位提高到64位,最主要的改變?cè)龃罅藢ぶ纺芰?,可以突?2位系統(tǒng)只能訪問3G內(nèi)存的限制,但是,32位到64位的改變并不一定意味著程序運(yùn)行速度的提高,甚至有些情況下會(huì)因?yàn)?4位系統(tǒng)中的數(shù)據(jù)占用內(nèi)存變大而導(dǎo)致程序運(yùn)行速度變慢。而寄存器數(shù)量的增加,則直接提高了程序運(yùn)行速度,當(dāng)然,前提應(yīng)用需要重新為64位系統(tǒng)編譯一遍,讓程序可以充分使用所有的寄存器。
使用蘋果公司提供的Xcode 5可以快速將以前的應(yīng)用編譯成64位應(yīng)用。在編譯過程中只需要把支持的設(shè)備改成“iOS 7”并把應(yīng)用的體系結(jié)構(gòu)設(shè)置選項(xiàng)由 “Architectures”改成 “Standard Architectures(including 64-bit)”這種支持64平臺(tái)的即可。
由于64位系統(tǒng)與32位系統(tǒng)在數(shù)據(jù)類型等方面的差異,任何平臺(tái)上32位應(yīng)用升級(jí)為64位應(yīng)用大體使用的方法都是是一個(gè)反復(fù)迭代的過程,不斷地在一些細(xì)節(jié)問題上來來回回,如字節(jié)序、調(diào)整編譯器選項(xiàng)等等,修改相關(guān)代碼并測(cè)試程序,解決出現(xiàn)的問題。并時(shí)不時(shí)停下來查看是否達(dá)到了總體目標(biāo)--遵從ANSI標(biāo)準(zhǔn)及源代碼將來的可移植性。
Xcode 5編譯的iOS 7程序結(jié)果包括32位和64位兩套二進(jìn)制代碼,在32位的iOS系統(tǒng)上會(huì)調(diào)用32位的二進(jìn)制代碼,在64位系統(tǒng)上會(huì)調(diào)用64位的二進(jìn)制代碼,以此來解決向后兼容的問題。
蘋果考慮到很多32位的程序可能在沒有重新編譯的情況下部署到64位系統(tǒng)上,64位的iOS系統(tǒng)中帶有兩種FrameWork,分別是32位和64位的。當(dāng)64位的iOS系統(tǒng)運(yùn)行原來的32位程序時(shí),系統(tǒng)會(huì)調(diào)用32位的FrameWork作為底層支撐,當(dāng)系統(tǒng)運(yùn)行64位程序時(shí),系統(tǒng)會(huì)調(diào)用64位的FrameWork作為底層支撐。
也就是說,當(dāng)一個(gè)iPhone 5S上同時(shí)運(yùn)行32位程序和64位程序時(shí),系統(tǒng)同時(shí)將32位和64位兩套FrameWork載入了內(nèi)存中,所以消耗的內(nèi)存也比較多。如果一臺(tái)64位的iOS設(shè)備上運(yùn)行的所有程序都是為64位系統(tǒng)編譯過的,iOS系統(tǒng)將只載入64位的FrameWork,這將節(jié)省好多內(nèi)存。所以,如果大家都可以快速將程序傳換成64位的,iOS將跑得更快。
32位的iOS系統(tǒng)和64位的iOS系統(tǒng)主要的差別有兩個(gè),一個(gè)是數(shù)據(jù)類型的差別,一個(gè)是過程調(diào)用方法的差別。在數(shù)據(jù)類型上,主要的變化是指針類型(Pointer)和長整數(shù)類型(long)的長度變化和內(nèi)存對(duì)齊方式的變化,同時(shí)也導(dǎo)致了更高級(jí)別數(shù)據(jù)類型的變化,如NSInteger的長度也有變化。
在過程調(diào)用方法上,因?yàn)锳RM V8和ARM V7具有不同數(shù)量的寄存器,具有不同的過程調(diào)用約定,所以32位系統(tǒng)和64位系統(tǒng)在匯編層級(jí)也是不同的。
而這些變化會(huì)帶來諸多影響,需要我們?cè)谵D(zhuǎn)換或開發(fā)程序時(shí)注意。
由于在32位系統(tǒng)中l(wèi)ong和int的長度是一樣的,不少開發(fā)者習(xí)慣將長整型數(shù)據(jù)(long)賦予整型(int),這在64位系統(tǒng)中是可能會(huì)出問題的。因?yàn)?4位系統(tǒng)中l(wèi)ong比int長,將long值賦予int將導(dǎo)致數(shù)據(jù)丟失。
同樣,因?yàn)樵?2位系統(tǒng)中指針類型(Pointer)和整型(int)的長度是一樣的,也有開發(fā)者習(xí)慣把指針類型(Pointer)直接賦給一個(gè)整型(int)存放。但在64位系統(tǒng)中就會(huì)有問題,因?yàn)?4位系統(tǒng)中指針類型(Pointer)比整型(int)長,將指針類型(Pointer)值賦予整型(int)將導(dǎo)致地址數(shù)據(jù)丟失,最終導(dǎo)致嚴(yán)重問題。
同時(shí)還有無符號(hào)整數(shù)和有符號(hào)整數(shù)的混用等都會(huì)出現(xiàn)32位系統(tǒng)與64位系統(tǒng)結(jié)果不一致的情況。
例如:
int i=-2;
unsigned int j=1;
long l=i+j;
32位下是-1,在64位下是4294967295。原因在于表達(dá)式(i+j)是一個(gè)unsigned int表達(dá)式,但把它賦值給k時(shí),符號(hào)位沒有被擴(kuò)展。要解決這個(gè)問題,兩端的操作數(shù)只要均為signed或均為unsigned就可。
因此,在程序中盡量避免不同數(shù)據(jù)類型間的轉(zhuǎn)換并進(jìn)行認(rèn)真檢查和測(cè)試才能夠保證程序的穩(wěn)定運(yùn)行。
在32位系統(tǒng)上定義一個(gè)結(jié)構(gòu)包含兩個(gè)長整型(long)類型,第二個(gè)長整型(long)數(shù)值的偏移量是4個(gè)字節(jié),可以通過結(jié)構(gòu)地址加4的方式獲取,但是在64位系統(tǒng)上就會(huì)出錯(cuò),因?yàn)樵?4位系統(tǒng)中第二個(gè)長整型(long)數(shù)值的偏移量是8個(gè)字節(jié)。
其他有關(guān)位運(yùn)算的技術(shù)使用中也應(yīng)注意,比如掩碼技術(shù),在使用一個(gè)長整型(long)的掩碼,轉(zhuǎn)到64位系統(tǒng)后高位都是0,計(jì)算出來的結(jié)果可能不符合預(yù)期。
3.3.1 重視32位應(yīng)用和64位應(yīng)用之間的數(shù)據(jù)交換
大多數(shù)iOS應(yīng)用不可避免的會(huì)通過網(wǎng)絡(luò)交換數(shù)據(jù),同時(shí)用戶保存的數(shù)據(jù)也可能通過備份等方式在32位系統(tǒng)和64位系統(tǒng)之間切換,所以應(yīng)用在保存和發(fā)送流數(shù)據(jù)的時(shí)候一定要考慮充分。比如數(shù)據(jù)在32位系統(tǒng)中保存,在64位系統(tǒng)中能否正常打開,或者反過來,在64位系統(tǒng)中保存,在32位系統(tǒng)中打開是否正常。
3.3.2 注意匯編語言代碼的規(guī)范
如果在應(yīng)用代碼中需要嵌入?yún)R編語言代碼,則需要參考64位系統(tǒng)的指令集來編寫匯編代碼。
3.3.3 不進(jìn)行可變參數(shù)過程與定參過程的相互轉(zhuǎn)換
32位系統(tǒng)和64位系統(tǒng)對(duì)于這兩種過程調(diào)用方式的處理方法不同,因此不要進(jìn)行類似轉(zhuǎn)換。
3.3.4 iOS 7 開發(fā)需要注意的事項(xiàng)
iOS 7的正式上線是隨著iPhone5S正式上市開始的。在iOS 7應(yīng)用沒有大量推出之前,蘋果公司給開發(fā)人員提供過渡性指導(dǎo):
(1)確保應(yīng)用內(nèi)容在半透明的UI元素中清晰可見。
(2)重新設(shè)計(jì)自定義欄中按鍵的圖標(biāo)。在iOS 7中,自定義欄發(fā)生了較大的改變。
(3)設(shè)計(jì)好無邊框按鍵,重新設(shè)計(jì)應(yīng)用布局。
(4)支持動(dòng)態(tài)輸入。在iOS 7中,用戶能夠調(diào)節(jié)輸入時(shí)獲選詞的大小,開發(fā)人員應(yīng)該注意這一點(diǎn)。
(5)確保應(yīng)用的手勢(shì)控制不會(huì)與iOS 7中新的手勢(shì)形成沖突。
(6)注意iOS 7中新的陰影、漸變和切面等視覺效果,以獲得最好的視覺體驗(yàn)。
(7)在必要的時(shí)候,使用應(yīng)用在iOS 6系統(tǒng)下最佳的設(shè)定,如自動(dòng)布局等。確保應(yīng)用沒有使用過時(shí)的API。
總的來說,64位的A7處理和iOS 7都是新生事物——A7是移動(dòng)智能終端上的第一款64位處理器,而iOS 7的上線也讓不少蘋果愛好者褒貶不一。但不可否認(rèn)的是,A7處理器的應(yīng)用可以使得iPhone的應(yīng)用運(yùn)行更流暢,而開發(fā)者如果想讓用戶體驗(yàn)更好,就必須去迎合64位的應(yīng)用開發(fā)特點(diǎn)。
據(jù)蘋果本周一 (2013年9月23日)公布的數(shù)據(jù)顯示,iPhone 5S和iPhone 5C在上市后首個(gè)周末就銷售了900萬部,遠(yuǎn)高于iPhone 5上市首個(gè)周末500萬部的銷量。而美國移動(dòng)應(yīng)用分析公司Localytics發(fā)布調(diào)查報(bào)告稱,蘋果最新智能手機(jī)iPhone 5C、iPhone 5S上市僅三天時(shí)間,就已經(jīng)占據(jù)美國市場(chǎng)iPhone激活率的1.36%。其中,iPhone 5S在美國的激活率是iPhone 5C的3.4倍,在全球市場(chǎng)更是高達(dá)3.7倍。[4]這說明更高端速度更快的A7處理器用戶會(huì)大量涌現(xiàn),64位的應(yīng)用開發(fā)大有可為。
[1]http://www.apple.com/cn/iphone-5s/[OL].apple,2013-09-10.
[2]64位核心 A7處理器的IPAD或真正取代 PC.http://news.zol.com.cn/article/157559.html[OL].中關(guān)村在線,2013-09-13.
[3]64-Bit Transition Guide for Cocoa Touch.https://developer.apple.com/library/ios/navigation/index.html[OL].apple,2013-09-18.
[4]分析公司調(diào)查報(bào)告出爐:全球5S銷量是5C的3.7倍.http://it.sohu.com/20130924/n387106450.shtml[OL].搜狐 IT,2013-09-24.