找回密碼 或 安全提問
 註冊
|註冊|登錄

伊莉討論區

搜索
請尊重及感激所有版主付出和奉獻尊貴會員無限使用任何功能你準備好成為出色的版主了嗎?
國中無修一拳超人中出無碼 meg中文mg
nkkd 173cos☆ぱwindows twzp克拉拉的ルーナと小倉七好

休閒聊天興趣交流學術文化旅遊交流飲食交流家庭事務PC GAMETV GAME
熱門線上其他線上感情感性寵物交流家族門派動漫交流貼圖分享BL/GL
音樂世界影視娛樂女性頻道潮流資訊BT下載區GB下載區下載分享短片
電腦資訊數碼產品手機交流交易廣場網站事務長篇小說體育運動時事經濟
上班一族博彩娛樂

(4月新番)[繁]搖曳露

[繁]怪獸八號02-

[繁]戰隊大失格03-

[繁]迷宮飯17-

【高清繁】✡ 霹靂英

[繁]月光下的異世界之
電腦新資訊電腦軟體討論電腦軟體資訊分享電腦硬體討論電腦硬體資訊分享電腦萌化版電腦系統 OS 討論電腦程式設計
電腦設計技術交流圖像設計及交流各類下載工具教學寬頻上網討論
查看: 928|回復: 1
打印上一主題下一主題

[其他新資訊]iOS程式開發與XCode 4.X-iOS應用程式的生命週期(上)[複製鏈接]

Rank: 1

帖子
1001
積分
129 點
潛水值
22480 米
跳轉到指定樓層
樓主
發表於 2012-4-3 12:18 AM|只看該作者|倒序瀏覽
回覆中加入附件並不會使你增加積分,請使用主題方式發佈附件。
文‧圖/何孟翰 2012/3/16 下午 03:33:21

雖然說iCloud無疑是iOS5的一大賣點 (而且是最亮的那一個點 ),但是無庸置疑,對於iOS的使用者來說,流暢的使用者經驗才是一個決對的信念。也就是說,對於這些iOS使用者而言,流暢的應用程式使用似乎是理所當然的。

要達到這樣的使用者體驗,當然對應的硬體整合是一個必須的工程,這個部份從Apple自己研發的A系列CPU中我們可以看出一些端倪。不過對於軟體開發者們而言,如何開發出一個符合iOS設計理念的應用程式,並且能夠讓它在iOS中平順的執行,也是另一半不可或缺的努力。因此讓我們先來看看iOS的應用程式與生命週期,在了解了整個應用程式的運作之後,在設計應用程式時我們才能夠更容易融入這個iOS/Cocoa Touch的框架,並且設計出適合的應用程式。

iOS/OSX/Cocoa Touch
如日中天的iOS,事實上是和OSX與unix的一個分支BSD是系出同門的。因此如果除去了iOS與OSX漂亮的外衣(也就是Aqua介面)之後,你可以發現那些我們所學過的BSD,檔案結構,File handler,和網路這些bsd socket都可以在iOS上面重現。(甚至是從小學到大的C語言),這些經驗都可以在iOS上面重現。

然而,如果你是一個C語言的死硬派工程師(也就是使用gcc/make就像是吃飯喝水的程式設計師),可能會對於如何從main()這個程式的進入點,到居然就有一個iOS的圖示,甚至按下去之後就可以有一個介面與使用者互動而感到有些疑惑。當然如果要全部手動來編輯或許這樣的情境是很難手動一一達成,但是藉著Cocoa,也就是iOS上面的一層應用程式開發框架(Application Framework),我們是可以輕易的達到這樣的目的。
從最簡單的專案開始
Apple或許也是知道這個門檻並不是很容易跨過去,所以在XCode中總是準備了一些專案和版型讓我們直接套用。因此讓我們在繁中求簡,使用最簡單的一個專案來說明從mian()到應用程式界面的流程。

在X-Code 4.2,你可以使用專案新增精靈來新增一個專案,在最新的版本中提供了不同的版型,分別有提供從iPhone/iPad共用,標籤列應用程式,頁面導覽應用程式,與一些特化的版型如圖1。



▲ 圖1 新增一個iOS的Empty專案



如同圖1,請你選擇Empty Application,按下了Next之後,你可以在Product Name中輸入這個應用程式的名稱,此時輸入的值之後可以再修改,但是請你注意在Device Family中會出現Universal,這是代表你的應用程式在iPhone或者是iPad上會有不同的介面呈現。由於iPhone這種手持設備是480*320的整數倍,例如具有視網膜科技的Retina display的iPhone4/4S具有960*640的解析度。因此如果應用程式沒有專門對應的圖形,還是可以使用480*430的解析度來表現。而iPad/iPad2具有1024*768的解析度,盛傳的iPad3具有2048*1536的解析度,因此對於這種4:3的平板,能夠使用另一種介面設計來對應。
因此如圖2,在這個練習,請你使用Universal,這樣待會在討論時,你就可以了解我們的專案是如何對應這兩種不同的裝置,同時在底下的Use Core Data,Use Automatic Reference Counting與Include Unit Tests都請你【不要】圈選,這樣保持一個最簡單的專案,才能讓我們聚焦在整個應用程式執行的流程。



▲ 圖2 專案選取的介面



選定好應用程式儲存的路徑之後,這個專案就已經生成完成了。雖然這是一個最簡單(但是卻具體而微)的案子,但是它卻是具有使用者介面的專案了。

產生出來的檔案
檢視這個專案,你可以使用專案檢視器Project Navigatior,並且將所有的群組展開,你可以看到如圖3的結果。圖中的Frameworks,如同你已經知道的可以類比於函式庫,而Products可以看成是最後的可執行檔。而所有的原始碼,都會被放置在run_pc這個群組下,並且分成一個Supporting Files。在Supporting Files下放的是跟這個專案最核心相關的函式,而其它的檔案都會如同圖3般的放置在這個專案的群組之下。



▲ 圖3 產生的專案



如果要能夠理解這個專案和我們所理解的C語言與一般的應用程式的關係,請你先看一下main.m,打開後你可以看到如圖4的結果。



▲ 圖4 iOS應用程式的主程式



如果你有寫過傳統的Unix下應用程式,這個函數對你來說應該是完全不陌生,事實上,這個函數也就是當使用者點擊了圖示,並且開始執行的程式進入點。然而,如果你真的開始追蹤這個函數,你可能會感到疑惑,這個UIApplicationMain()只有一行程式碼,那這個函數是如何和整個應用程式的生命週期連結,並且我們是如何開始執行自訂的函數與程式碼呢?

委任(Delegate)的設計樣式
當你開始研讀Cocoa/Cocoa Touch的框架,一開始一定會驚訝的發現,UIApplicationMain是一個Cocoa Touch所提供的類別,也就是說,這個類別除非我們有傳入任何客制化的參數,不然這個【類別本身】是沒有任何能執行客制化程式的函數。因為基於一般的物件導向程式設計,對於一個既存的類別,如果你需要實作客制化的函數,但是卻想要擁有原本物件的特性應該要使用繼承的行為。

因此面對這個原生的類別,我們沒有繼承它卻想要擁有特化的函數,此時就必須要使用委任(Delegate)的這種設計樣式。這是一種物件導向的設計樣式典型,讓我們能夠在不繼承的情況下,保有物件的單純,卻可以擁有客制化函數的方法。

而在Cocoa Touch的加持下,如果你想要在UIApplication中實作自己的函數,則必須要有一個類別去實作UIApplicationDelegate的協定,也就是我們所看到的AppDelegate這個函數。在此我們先不要跳進去馬上看這個程式碼,讓我們看看這個iOS下應用程式的狀態。
應用程式的狀態
一個應用程式在安裝至iOS裝置之後,你會在畫面上看到一個圖示如圖5。



▲ 圖5 應用程式安裝後顯示於桌面上



此時的應用程式即是處於未執行的狀態,然而賞使用者點擊了桌面的這個圖示之後,這個應用程式就會進入前景執行的狀態如圖6。沒錯,在這個實例中圖形是一片空白的。此時的應用程式就可以接受使用者的輸入,並且作出回應。



▲ 圖6 應用程式處於執行的狀態



此時,如果使用者鎖上營幕,你會看到應用程式進入了【非活動】的狀態Inactive如圖7。如果使用者要回應簡訊或來電,而必須要在該應用程式處於前景,卻不得不處理其它的事件,而導致這個應用程式無法接收訊息,就會進入這個非活動的狀態。因此,這個狀態的應用程式雖然是在前景,卻無法接收使用者的事件。



▲ 圖7 進入非活動的應用程式狀態



此時如果使用者按下了Home 按鈕,在iOS4之後,這個應用程式就會進入背景狀態。此時如果你連續按兩下Home按鈕,你可以看到在背景的應用程式如圖8。大多數的應用程式會短暫的處在這個狀態,之後就會進入暫時中止【suspend】的狀態。
...
瀏覽完整內容,請先 註冊登入會員
分享分享0收藏收藏0支持支持0
若瀏覽伊莉的時侯發生問題或不正常情況,請使用Internet Explorer(I.E)。

使用道具檢舉

帖子
0
積分
0 點
潛水值
280 米
頭香
發表於 2012-6-27 08:48 AM|只看該作者
如果你忘記伊莉的密碼,請在登入時按右邊出現的 '找回密碼'。輸入相關資料後送出,系統就會把密碼寄到你的E-Mail。
頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂頂
如果發覺自己無法使用一些功能或出現問題,請按重新整理一次,並待所有網頁內容完全載入後5秒才進行操作。

使用道具檢舉

您需要登錄後才可以回帖 登錄 | 註冊

Powered by Discuz!

© Comsenz Inc.

重要聲明:本討論區是以即時上載留言的方式運作,對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿上傳和撰寫 侵犯版權(未經授權)、粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。
回頂部