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