iOS應(yīng)用程序開發(fā)中文版_第1頁(yè)
iOS應(yīng)用程序開發(fā)中文版_第2頁(yè)
iOS應(yīng)用程序開發(fā)中文版_第3頁(yè)
iOS應(yīng)用程序開發(fā)中文版_第4頁(yè)
iOS應(yīng)用程序開發(fā)中文版_第5頁(yè)
已閱讀5頁(yè),還剩249頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

iOSiOSiOS應(yīng)MaciPad、iPhoneiPodtouchiOS應(yīng)用程序。XcodeiOSSDK(Apple提供的開發(fā)工具)Objective-C(驅(qū)動(dòng)所有iOS應(yīng)用程序和框架的程序設(shè)計(jì)語(yǔ)言)的編程基礎(chǔ)知識(shí),并將探索CocoaTouch框架。您將創(chuàng)建一個(gè)簡(jiǎn)單的iOS應(yīng)用程序,并學(xué)會(huì)在設(shè)備上進(jìn)行測(cè)試。最后,您還會(huì)學(xué)到如何將應(yīng)用程序提交到AppStore。各個(gè)主題的能力,并且掌握到著手開發(fā)iOS應(yīng)用程序的知識(shí)、工具和技能。如果您是Mac開發(fā)者:您其實(shí)已經(jīng)掌握了不少開發(fā)iOS應(yīng)用程序的知識(shí)??墒?,盡管iOS和OSX使用\h\h您在開發(fā)應(yīng)用程序時(shí),會(huì)使用到iOS(SDK)以及XcodeApple的集成開發(fā)環(huán)境(IDE)。XcodeiPhoneiPodtouch和iPad應(yīng)用程序,提供了所需要的全部資源。大多數(shù)應(yīng)用程序開發(fā)工具集中顯示在一個(gè)窗口中,Xcode稱之為工作區(qū)窗口。在此窗口內(nèi),您可以順暢地從代碼編寫轉(zhuǎn)換到代碼調(diào)試,再到用戶界面設(shè)計(jì)。iOSSDKXcode工具集,包含iOS專用的工具、編譯器和框架。XcodeMac\hMacAppStoreXcode,然后點(diǎn)按―免費(fèi)‖XcodeXcodeiOSSDK。(MacOSXv10.7MacAppStore應(yīng)用程序。如果您使用的是較版本的MacOSX,則需要升級(jí)。)\hiOSDeveloperProgramApple開發(fā)者iOSSimulator中測(cè)試。但是,您只有加入該計(jì)劃,才能在設(shè)備上測(cè)iOSDevCenteriOSProvisioningPortal。如果您iOSiOSSDK,開發(fā)一個(gè)簡(jiǎn)單可用的程序并非難事。您的首個(gè)iOS應(yīng)用程序教程,介紹了這些工具、基本設(shè)計(jì)模式和應(yīng)用程序開發(fā)過(guò)程。通過(guò)這個(gè)教程,您將學(xué)習(xí)創(chuàng)建一個(gè)能接收用戶文本輸入并能將文本顯示在屏幕上的應(yīng)用程序。您還將學(xué)到如何在Mac上的iOSSimulator中運(yùn)行這一程序。本教程中的簡(jiǎn)單步驟引入了一些簡(jiǎn)練實(shí)用的概念,將在今后的程序開發(fā)中不斷地您的首個(gè)iOS應(yīng)用程序是路線圖中最長(zhǎng)的文章,但請(qǐng)不要倉(cāng)促地完成它。它為您在后面將詳細(xì)學(xué)習(xí)的概念奠立即學(xué)習(xí)本教程:\hiOS應(yīng)用程序iOS開發(fā)環(huán)境中,創(chuàng)建一個(gè)簡(jiǎn)單的應(yīng)用程序。完成教程后,可返回本頁(yè)繼續(xù)學(xué)習(xí)馬上著手開發(fā)iOS應(yīng)用程序。Xcode提供整套管理開發(fā)工作流程的工具——。您可以自定您的首個(gè)iOS應(yīng)用程序Xcode來(lái)測(cè)試和調(diào)試源代碼、分析和改進(jìn)應(yīng)用程序的性能、執(zhí)行源代碼控制操作、歸檔并將應(yīng)用程序提交到AppStore等等。立即閱讀此文章:\hXcode中管理工作流程XcodeiOSObjective-C是一種簡(jiǎn)潔的、面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言,所有iOS應(yīng)用程序都由它來(lái)驅(qū)動(dòng)。您需要編寫Objective-C代碼來(lái)創(chuàng)建應(yīng)用程序,同時(shí)您需要懂得該語(yǔ)言,才能使用大多數(shù)的框架。盡管您可以使用其他編程語(yǔ)言來(lái)開發(fā),但不使用Objective-C就無(wú)法生成iOS應(yīng)用程序。Objective-C是一種簡(jiǎn)單的程序設(shè)計(jì)語(yǔ)言,其語(yǔ)法和規(guī)范簡(jiǎn)單易學(xué)。如果您有其他面向?qū)ο蟪绦蛟O(shè)計(jì)語(yǔ)言(例JavaC++)C語(yǔ)言程序員,您會(huì)發(fā)現(xiàn)熟悉面向?qū)ο缶幊毯蚈bjective-C后,應(yīng)用程序的設(shè)計(jì)和修改變得更加容易。Objective-C要?jiǎng)?chuàng)建iOS應(yīng)用程序,您需要了解如何創(chuàng)建對(duì)象、比較對(duì)象、查詢對(duì)象的相關(guān)信息,以及訪問(wèn)數(shù)據(jù)集(如數(shù)組)iOSObjective-C代碼Apple提供的框架組成??蚣馨椒ㄙY源庫(kù),供您的應(yīng)用程序調(diào)用。多個(gè)應(yīng)用(API)來(lái)利用框架。API(已發(fā)布在頭文件中)指定可用的類、數(shù)據(jù)結(jié)構(gòu)和協(xié)議。Apple編寫的框架,預(yù)計(jì)了您可能想要實(shí)現(xiàn)的基本功能。使用框架既省\h研究主要框架OSXAPIiOSAPI\h將代碼與框架整合Objective-COSXAPI和iOSAPI之間存在不同之處,但應(yīng)用程序和框架之間的關(guān)系通常相同。\h中使用這些模式。這些設(shè)計(jì)模式在OSX和iOS中基本相同。僅僅創(chuàng)建一個(gè)能用的應(yīng)用程序是不夠的,用戶期望的iOS應(yīng)用程序是直觀易用、交互性強(qiáng)和引人HumanInterfaceGuidelines(iOS用戶界面指南)中清楚說(shuō)明的原則和約定,為您的產(chǎn)品設(shè)計(jì)最好的用戶\hiOSOSX的不同,因?yàn)橐苿?dòng)設(shè)備(master-detailpattern)(utilityapp)iPad、iPhone和iPodtouch上均可運(yùn)行該應(yīng)用程序嗎?諸如此類的設(shè)計(jì)決策有助于構(gòu)建應(yīng)用程序的架構(gòu)。但在根據(jù)架構(gòu)進(jìn)行開發(fā)之前,請(qǐng)務(wù)必熟悉CocoaTouch框架。畢竟,應(yīng)用程序并不會(huì)憑空出現(xiàn)——您使用框\h\h了解您的應(yīng)用程序的核心對(duì)象iOS\h將您的應(yīng)用程序國(guó)際化HelloWorldAppXcodeAppStore上發(fā)布應(yīng)用程序,序ID來(lái)標(biāo)識(shí)應(yīng)用程序。iTunesConnectAppStore審立即閱讀此文章:\hAppStoreAppStoreXcodeQuickHelp顯示簡(jiǎn)明的參考信息,不會(huì)分散您對(duì)正在編輯的文件的注意力。請(qǐng)點(diǎn)按符號(hào)、界面對(duì)象或生成設(shè)置,以查看更多信息。按住Control鍵點(diǎn)按Xcode本身的各個(gè)區(qū)域,獲得任務(wù)導(dǎo)向的說(shuō)明,介Xcode中的―Documentation‖管理器,提供深入的編程指南、指導(dǎo)教程、示例代碼、開發(fā)者工具使用手冊(cè)、詳APIApple工程師講解的視頻演示。―Documentation‖管理器提供了一個(gè)一體化視圖,可在其中搜索和瀏覽所有Apple開發(fā)者文稿。iOSDeveloperLibrary也在網(wǎng)上提供。\h馬上著手開發(fā)iOS應(yīng)用程序iOS開發(fā)者,首先,應(yīng)該\hiOSDeveloperProgram。然后,您iOSDeveloperLibrary下載示例應(yīng)用程序項(xiàng)目,并從中了解各個(gè)方面是如何配合工作的,從而深化已學(xué)iOSiOS\hiOSTechnologyOverview(iOS技術(shù)概述)iOS\hiOSHumanInterfaceGuidelines(iOS用戶界面指南)iOS\hDevelopingfortheAppStore(AppStore開發(fā))帶您逐步完成這些過(guò)程:開發(fā)應(yīng)用程序,預(yù)備測(cè)試設(shè)備,提交應(yīng)用程序到AppStore。\hProgrammingwithObjective-C(Objective-C編程)Objective-C程序設(shè)計(jì)語(yǔ)言定義類、\hiOSAppProgrammingGuide(iOS應(yīng)用程序編程指南)iOS應(yīng)用程序時(shí),您必須要了解并做到的iOS\hAppStoreSubmissionTutorial(AppStore提交應(yīng)用程序教程)AppStore的過(guò)程。\hYourSecondiOSApp:Storyboards(iOS應(yīng)用程序:串聯(lián)圖)向您講解如何使用串聯(lián)圖,實(shí)現(xiàn)主\hYourThirdiOSApp:iCloud(iOS應(yīng)用程序:iCloud)iCloud集成到基于文稿的應(yīng)用iOS您的首個(gè)iOS應(yīng)用程序iOS應(yīng)用程序開發(fā)的―工具(Tools)Xcode技巧(Techniques)iOS應(yīng)用程序開發(fā)的基礎(chǔ)。稍后在馬上著手開發(fā)iOS應(yīng)用程序中,您將會(huì)學(xué)習(xí)另一個(gè)教程將您的應(yīng)用程序國(guó)際化,為您在此教程中創(chuàng)建Objective-C程序設(shè)計(jì)語(yǔ)言的知識(shí),您將能更好地理Objective-C,也不必?fù)?dān)心本教程中的代碼難以理解。您學(xué)完馬上著手開發(fā)iOS注:iPhoneiPad應(yīng)用程序所用到的完全相同;所以即使您打算只開發(fā)用于iPad的程序,您仍然可以將本教程當(dāng)作入門指南。iOSXcode4.3或更高版本。XcodeApple的集成開發(fā)環(huán)境(IDE)iOSMacOSXMacXcodeiOSSDKiOSXcodeXcode中創(chuàng)建或打開過(guò)項(xiàng)目,您會(huì)看到一個(gè)項(xiàng)目窗口,而不是―WelcometoXcode‖Xcode將打開一個(gè)新窗口并顯示對(duì)話框,讓您從中選取一個(gè)模板。Xcode內(nèi)建了一些應(yīng)用程序模板,您可以使用這些模板來(lái)開發(fā)常見類型的iOS應(yīng)用程序。例如―Tabbed‖模板可以創(chuàng)建與iTunes類似的應(yīng)用程序,在對(duì)話框的主區(qū)域中,選擇―SingleViewApplication‖,然后點(diǎn)按―Next‖。ProductClass注:XcodeXcode使用類前綴名稱來(lái)命名為您所創(chuàng)建的類。\hXcode在工作區(qū)窗口中打開新項(xiàng)目,窗口的外觀近似于:Simulator(Xcode中)中運(yùn)行它。顧名思義,Simulator可模擬應(yīng)用程序在iOS設(shè)備上運(yùn)行,讓您初步了解它的外觀和行為。在SimulatorXcodeXcode完成生成項(xiàng)目后,SimulatoriPhoneiPad產(chǎn)品,Simulator會(huì)iPhoneiPhone屏幕上,Simulator中的對(duì)象,以及它們?nèi)绾尉o密協(xié)作來(lái)啟動(dòng)應(yīng)用程序?,F(xiàn)在,退出Simulator(選取―iOSSimulator‖>―QuitiOSSimulator‖;請(qǐng)確定您不是退出Xcode)。Xcode模板開發(fā)的,所以運(yùn)行應(yīng)用程序時(shí),大部分基本的應(yīng)用程序環(huán)境已經(jīng)自動(dòng)建立好了。件傳遞給應(yīng)用程序)UIApplicationMainUIKit框架提供,并且在main.m源文件中自動(dòng)調(diào)用。注:UIKit框架提供應(yīng)用程序構(gòu)建和管理其用戶界面所需的全部類。UIKitCocoaTouch提供的面向?qū)ο蟮谋姸嗫蚣苤械囊粋€(gè),而CocoaTouch是所有iOS應(yīng)用程序的應(yīng)用環(huán)境。查看main.mmain.mmain(autoreleasepool)UIApplicationMain@autoreleasepoolreturnUIApplicationMain(argc,argv,nil,NSStringFromClass([HelloWorldAppDelegate@autoreleasepoolreturnUIApplicationMain(argc,argv,nil,NSStringFromClass([HelloWorldAppDelegateiOS應(yīng)用程序中,窗口對(duì)象為應(yīng)用程序的可見內(nèi)容提供容器,協(xié)助將事件傳遞到應(yīng)用程序?qū)ο?,協(xié)助應(yīng)用程序分散注意力。同樣的,點(diǎn)按―SupportingFiles‖文件夾圖標(biāo)旁邊的展示三角形以關(guān)閉該文件夾。Info.plist文件還包含應(yīng)用程序?qū)ο髴?yīng)該載入的串聯(lián)圖的名稱。串聯(lián)在―HelloWorld‖MainStoryboard.storyboard(Info.plist文件只―HelloWorld‖應(yīng)用程序僅包含一個(gè)視圖控制器(HelloWorldViewController)?,F(xiàn)在,HelloWorldViewController管理由單視圖提供的一個(gè)區(qū)域的內(nèi)容。視圖是一個(gè)對(duì)象,它在屏幕的矩形區(qū)域中)MVC中,模型對(duì)象表示數(shù)據(jù)(例要了解更多有關(guān)MVC的信息,但最好開始思考應(yīng)用程序中的對(duì)象如何扮演不同的角色。Xcode在編輯器區(qū)域打開串聯(lián)圖。(串聯(lián)圖對(duì)象后面的區(qū)域,即看起來(lái)像圖紙的區(qū)域,稱為畫布。)的。―HelloWorldViewController‖場(chǎng)景由一些項(xiàng)目組成,顯示在Xcode大綱視圖(在畫布和項(xiàng)目導(dǎo)航器之間的面景的原來(lái)場(chǎng)景。不過(guò),Exit對(duì)象使視圖控制器能夠展開任意一個(gè)場(chǎng)景。HelloWorldViewController對(duì)象(以黃色球體內(nèi)的淺色矩形表示)。Simulator畫布上,場(chǎng)景下方的區(qū)域稱為場(chǎng)景臺(tái)?,F(xiàn)在,場(chǎng)景臺(tái)顯示了視圖控制器的名稱,即―HelloWorldViewController‖Xcode創(chuàng)建了一個(gè)基于―SingleView‖main.m源文件、Info.plist文件以及串聯(lián)圖文件,并了解了HelloWorldViewController所管理的場(chǎng)使用Xcode檢查器來(lái)驗(yàn)證視圖控制器的狀態(tài),并查看關(guān)于它的其他信息。Simulator中運(yùn)行應(yīng)用程序時(shí)所看到的白色背景。要確定應(yīng)用Simulator中運(yùn)行應(yīng)用程序來(lái)驗(yàn)證新顏MainStoryboard.storyboard,在畫布上打開串聯(lián)圖。)Xcode在畫布上高亮顯示視圖區(qū)域。Xcode高亮顯示該視圖,所以畫布上的顏色可能和―Colors‖窗口中的顏色看起彈出式菜單仍然顯示―HelloWorld‖>―iPhone5.0Simulator‖。您看到的應(yīng)該大致是這樣的:驗(yàn)證了應(yīng)用程序重新顯示白色背景后,退出Simulator。運(yùn)行應(yīng)用程序時(shí),Xcode可能會(huì)在工作區(qū)窗口的底部打開調(diào)試區(qū)。本教程不會(huì)用到該面板,您可以將其關(guān)閉,Xcode提供了對(duì)象庫(kù),您可以將庫(kù)中的對(duì)象添加到串聯(lián)圖文件。其中的一些對(duì)象屬于視圖中的用戶界面元素,―HelloWorldViewController‖場(chǎng)景已經(jīng)包含了一個(gè)視圖?,F(xiàn)在需要添加一個(gè)按鈕、一個(gè)標(biāo)簽和一個(gè)文本欄。然后,(UI)元素拖移到畫布上的視圖中,來(lái)添加用戶界面元素。UI元素添加到視圖后,可以將UIUI元素時(shí),會(huì)出現(xiàn)藍(lán)色的虛線(稱為對(duì)齊參考線),有助于將項(xiàng)目與視圖的中心和通過(guò)拖移調(diào)整大小控制柄(顯示在元素邊框上的小白方塊)UI元素的大小。一般情況下,在畫布上或在輸入占位符文本和更改對(duì)齊設(shè)置后,―TextFieldAttributes‖檢查器外觀應(yīng)該像這樣:UI您可能注意到,當(dāng)您將文本欄、標(biāo)簽和按鈕添加到背景視圖時(shí),XcodeConstraints的大綱視圖中插入了項(xiàng)目。CocoaTouch具有一個(gè)自動(dòng)布局系統(tǒng),讓您定義用戶界面元素的布局約束。這些約束定義用戶界面元保后無(wú)法使它消失。要添加此功能,需要在UI元素和視圖控制器之間進(jìn)行適當(dāng)?shù)倪B接。下面將說(shuō)明如何建立連接。UI―將此聯(lián)系人添加到用戶的聯(lián)系人列表‖。這種互動(dòng)是目標(biāo)-操作機(jī)制的一部分,該機(jī)制是另一種CocoaTouch設(shè)計(jì)模式。使用Xcode,您可以將操作添加到UI元素,并設(shè)置其相應(yīng)的操作方法。方法是按住Control鍵并將畫布上的元Xcode―Utilities‖―AssistantEditor‖按鈕以顯示輔助編輯器面HelloWorldViewController.h,請(qǐng)?jiān)陧?xiàng)目導(dǎo)航器中選@interface實(shí)現(xiàn)文件中的類擴(kuò)展是申明類的專有屬性和方法的地方。(在編寫Objective-C代碼中,您將學(xué)到有關(guān)類擴(kuò))OutletXcode@interfaceControlControlControlControl鍵并停止拖移后,Xcode注:HelloWorldViewController.m類擴(kuò)展區(qū)域以外的其他地方松開Control鍵并停止拖移,可彈出式窗口(如有需要),并再試一次按住Control鍵拖移。changeGreeting方法,讓它把用戶輸入文本欄的文本載入,然后在標(biāo)簽中顯idCocoaid Control鍵將―Hello‖HelloWorldViewController.m后,您完成了兩件事情:通過(guò)Xcode將合適的代碼添加到了視圖控制器類中(HelloWorldViewController.m中),并在按鈕和視圖控制器之間創(chuàng)建了連接。具體來(lái)說(shuō),Xcode做了(IBAction)changeGreeting:(id)sender-(IBAction)changeGreeting:(id)senderUI元素(即標(biāo)簽和文本欄)outletXcodeoutlet,從而使對(duì)象在些對(duì)象通訊,您在它們之間創(chuàng)建outlet連接。outlet的步驟與添加按鈕操作的步驟非常相似。開始之前,請(qǐng)確定主串聯(lián)圖文件仍然顯示在HelloWorldViewController.m在輔助編輯器中保持打開。為文本欄添加Control鍵將視圖中的文本欄拖移到實(shí)現(xiàn)文件中的類擴(kuò)展。隨著您按住Control鍵拖移,看到的應(yīng)該是這樣的:Controloutlet聲明Controloutletoutlet將―Type‖欄設(shè)定為―UITextField‖Xcodeoutlet通過(guò)為文本欄添加@property(weak,nonatomic)IBOutletUITextField@property(weak,nonatomic)IBOutletUITextField注:IBOutletXcodeoutlet處理。它實(shí)際上的定義為XcodechangeGreeting:方法聲明一樣,Xcode在文本欄聲明的左邊顯示帶有填充的圓圈,以表示已經(jīng)較Xcode使用按住Control@synthesize指令添加到您所聲明的每個(gè)屬性的實(shí)現(xiàn)outlet并配置連接。在視圖控制器和標(biāo)簽之間建立連接,會(huì)讓視圖控制器以字符串(該字符串包含用戶輸入的文本)outlet的步驟相同,只不過(guò)在配置時(shí)要做適當(dāng)修改。(HelloWorldViewController.m仍然顯示在輔助編輯器中。)為標(biāo)簽添加按住ControlOutletOutlet標(biāo)準(zhǔn)編輯器按鈕是最左邊的那個(gè)―Editor‖按鈕,它是這樣的:在―Connections‖檢查器中,Xcode顯示了所選對(duì)象(在本例中為視圖控制器)的連接。在工作區(qū)窗口中,您看到MainStoryboard.storyboard。Control鍵將文本欄拖移到場(chǎng)景臺(tái)中的黃色球體(黃色球體代表視圖控制器對(duì)象)。松開Control鍵并停止拖移時(shí),看到的應(yīng)該是這樣的:iOSAppleVoiceOverVoiceOver,用戶可以在不看屏幕的情況其標(biāo)簽、提示以及很多特征。就HelloWorld應(yīng)用程序而言,您將要給文本欄添加一則提示。立適當(dāng)?shù)倪B接時(shí),也就更新了實(shí)現(xiàn)文件以支持Outlet和操作。您不必使用Xcode自動(dòng)添加代碼(即通過(guò)按住Control鍵從畫布拖移到源文件來(lái)建立連接時(shí))的功能。而是可以即對(duì)客戶端和子類為可見,所以須將此聲明添加到視圖控制器的頭文件,即HelloWorldViewController.h。點(diǎn)按―UtilitiesView‖按鈕來(lái)隱藏實(shí)用工具區(qū)域(或者選取―View‖>―Utilities‖>―HideUtilities‖)。@property(copy,nonatomic)NSString@property(copy,nonatomic)NSStringXcode會(huì)根據(jù)鍵入內(nèi)容提供自動(dòng)補(bǔ)齊的建議。例如,開始鍵入@prop...Xcode@property,因此會(huì)在如果建議合適(如上述示例所示)Return隨著您繼續(xù)鍵入,XcodeNSStr...,Xcode可能顯示如存取方法有時(shí)也稱為―getter‖和―setter‖)userNamegettersetter-(NSString-(void)setUserName:(NSStringuserName屬性。changeGreeting:changeGreeting方法應(yīng)該:實(shí)施changeGreeting:-(IBAction)changeGreeting:(id)sender-(IBAction)changeGreeting:(id)senderself.userName=NSString*nameString=self.userName;if([nameStringlength]==0){nameString=NSString*greeting=[[NSStringalloc]initWithFormat:@"Hello,%@!",nameString];self.label.text=greeting;self.userNameself.textField.textuserName屬護(hù)應(yīng)用程序數(shù)據(jù)的相關(guān)信息。換句話說(shuō),應(yīng)用程序數(shù)據(jù)不應(yīng)儲(chǔ)存在用戶界面元素(HelloWorld應(yīng)NSString*nameStringself.userName創(chuàng)建一個(gè)新的變量(NSString類型)并將其設(shè)userName屬性。([nameStringlength0),nameString將包含字符串―World‖字符串所規(guī)定的格式(很像ANSICprintf函數(shù))。在iOS應(yīng)用程序中,允許文本輸入的元素成為第一響應(yīng)器時(shí),鍵盤會(huì)自動(dòng)出現(xiàn);元素失去第一響應(yīng)器狀態(tài)時(shí),鍵UI元素的第一響應(yīng)器狀態(tài)這種間接方式,使協(xié)議是由\h將HelloWorldViewController-(BOOL)textFieldShouldReturn:(UITextField*)theTextField{if(theTextField==self.textField){[theTextField-(BOOL)textFieldShouldReturn:(UITextField*)theTextField{if(theTextField==self.textField){[theTextFieldreturn@interface<UITextFieldDelegate>。@interfaceHelloWorldViewController:UIViewController@interfaceHelloWorldViewController:UIViewControllerSimulator―Done‖按鈕使鍵盤消失,然后點(diǎn)按―Hello‖按鈕將―Hello,您的姓名!‖顯示在標(biāo)簽中。―排除故障和檢查代碼‖iOS返回馬上著手開發(fā)iOS應(yīng)用程序iOS應(yīng)用程序開發(fā)的內(nèi)容。如果應(yīng)用程序未能正確工作,請(qǐng)嘗試下一章中描述的解決問(wèn)題的方法,然后再返回馬上著手開發(fā)iOS應(yīng)用程序。如果程序未能正確工作,開發(fā)者會(huì)很自然地去檢查源代碼來(lái)找出錯(cuò)誤。但使用CocoaTouch,又增添了另一個(gè)層outlettextFieldOutlet連接到了文本欄。務(wù)必在串聯(lián)圖上檢查文本欄的連接:按住Control鍵點(diǎn)按文delegateoutlettextFieldoutlet的旁邊,看#import#import@interfaceHelloWorldViewController:UIViewController@property(copy,nonatomic)NSString#import#import@interfaceHelloWorldViewController@property(weak,nonatomic)IBOutletUITextField@property(weak,nonatomic)IBOutletUILabel@implementation[super//Doanyadditionalsetupafterloadingtheview,typicallyfromareturn(interfaceOrientation!=self.userName=NSString*nameString=ifif([nameStringlength]==0){nameString=@"World";NSString*greeting=[[NSStringalloc]initWithFormat:@"Hello,%@!",nameString];self.label.text=greeting;-(BOOL)textFieldShouldReturn:(UITextField*)theTextFieldif(theTextField==self.textField){[theTextFieldresignFirstResponder];returnXcode正如在您的首個(gè)iOS應(yīng)用程序Xcode工作區(qū)窗口中執(zhí)行。而輔助任務(wù)會(huì)在單獨(dú)的管理器窗口中執(zhí)行,如閱讀文稿、啟用設(shè)備進(jìn)行測(cè)試,以及準(zhǔn)備應(yīng)用程序用于提交到AppStore。Safari的標(biāo)簽,在工作區(qū)窗口使用多個(gè),而又有特定工作流程的在項(xiàng)目導(dǎo)航器中,選擇在項(xiàng)目編輯器中,選擇在項(xiàng)目導(dǎo)航器中,選擇在項(xiàng)目編輯器中,選擇iOSSimulatorMaciOSSimulatoriOSSimulator,您可以確保應(yīng)用程序按預(yù)期在Xcode在self.label.textgreeting;}點(diǎn)按工具欄中的―Run‖HelloWorldiOSSimulatorHelloWorld停止執(zhí)行。工作區(qū)窗口移到前臺(tái),其中調(diào)試區(qū)域在編輯器區(qū)域底部打開。調(diào)試區(qū)域iOSiOSSimulatorMac的設(shè)備上運(yùn)行它。這些設(shè)備提iOSSimulator沒有運(yùn)行在設(shè)備上運(yùn)行的所有線程。理想情況下,您應(yīng)該在所有您想要支持的設(shè)備和iOS版本上,進(jìn)行應(yīng)用程序的測(cè)試。iOSDeveloperProgramXcode在設(shè)備上開始運(yùn)行、測(cè)試和調(diào)試應(yīng)用程序。(本路線圖前面的設(shè)置部分,包含了有關(guān)加入此計(jì)劃成為iOS開發(fā)者的信息。)您必須從Xcode注:如果您正在Xcode的―Documentation‖管理器中閱讀以下說(shuō)明,請(qǐng)按住Control鍵,點(diǎn)按本頁(yè)的任意位置,然后從關(guān)聯(lián)菜單中,選擇―OpenPageinBrowser‖。本頁(yè)面會(huì)出現(xiàn)在默認(rèn)的網(wǎng)頁(yè)瀏覽器中。用網(wǎng)頁(yè)瀏覽器查看說(shuō)明在XcodeApple開發(fā)者用戶名稱和密碼,然后點(diǎn)按―Login‖XcodeiOSXcodeAppStore在XcodeMacID添加到您的帳戶時(shí),XcodeiOS團(tuán)隊(duì)預(yù)置描述文件(Xcode通配符應(yīng)用程序ID、開發(fā)證書和設(shè)備ID)。iOS團(tuán)隊(duì)預(yù)置描述文件也要安裝在您的設(shè)備上。Xcode的工具M(jìn)aciOS版本,會(huì)整體作為一個(gè)選項(xiàng)出現(xiàn)或―AlwaysAllow‖。XcodeXcode中執(zhí)行眾多操作。Xcode提供工作流程關(guān)聯(lián)型的幫助,如果需要與任務(wù)有Xcode用戶界面直接訪問(wèn)。此類幫助包含易于遵循的步驟、視頻或屏幕快照以及簡(jiǎn)明描述,查看Xcode在Xcode的―Documentation‖管理器中閱讀本文稿,請(qǐng)找到其―GoBack‖按鈕。在執(zhí)行其余步驟后,ControlXcodeInstrumentsiOSSimulator或設(shè)備上運(yùn)行時(shí)的性能。Instruments會(huì)從運(yùn)行的應(yīng)用程序收集數(shù)據(jù),并將此類數(shù)據(jù)呈現(xiàn)在圖形時(shí)間線中。InstrumentsHelloWorldiOSSimulatorInstruments面板中,點(diǎn)按―Allocations‖HelloWorld狀態(tài)存儲(chǔ)在磁盤上,用于以后可能的恢復(fù)。Xcode中的―Projects‖管理器會(huì)列出快照。Xcode設(shè)定為在某些情況下自動(dòng)創(chuàng)建快照,如在每次生成或每次(SCM)可讓您跟蹤修改,精細(xì)程度比快照所允許的更細(xì)。(對(duì)于團(tuán)隊(duì)合作開發(fā),源代碼控制管理還可幫助協(xié)調(diào)工作。)SCM系統(tǒng)將每個(gè)文件的多個(gè)版本存儲(chǔ)在磁盤上,并且將文件的各個(gè)版本的相關(guān)元數(shù)據(jù)儲(chǔ)存在SCM存儲(chǔ)庫(kù)中。XcodeSCM系統(tǒng):GitSubversion。Xcode包含版本編輯器,可以輕松地比較任一系統(tǒng)庫(kù)存XcodeAppStore的發(fā)布工作變得容易。您可使用方案XcodeXcode中的―Archives‖管理器,與他人準(zhǔn)備好發(fā)布應(yīng)用程序時(shí),您可使用―Archives‖AppStore發(fā)布所需的基本驗(yàn)證測(cè)試(這些測(cè)試獲得通過(guò),可加快應(yīng)用程序的審批)。接著即可將應(yīng)用程序直接從Xcode發(fā)布到AppStore。您將在本路線圖后面的準(zhǔn)備提交到AppStoreObjective-CiOSMacOSXObjective-CObjective-C并不是一種很難的語(yǔ)言,如果您花一點(diǎn)時(shí)間學(xué)習(xí),相信會(huì)慢慢領(lǐng)會(huì)到它的優(yōu)雅之處。Objective-C程序設(shè)計(jì)語(yǔ)言使您ANSIC程序設(shè)計(jì)語(yǔ)言。它Objective-C中。如果您不熟悉ANSIC,在嘗試閱讀此文章時(shí),最好先閱讀一下C語(yǔ)言的概述。Objective-CTheObjective-CProgrammingLanguage(Objective-C程序設(shè)計(jì)語(yǔ)言)Objective-CCObjective-C程序設(shè)計(jì)語(yǔ)言采用特定的語(yǔ)法,來(lái)定義類和方法、調(diào)用對(duì)象的方法、動(dòng)態(tài)地?cái)U(kuò)展類,以及創(chuàng)建編程接口,來(lái)解決具體問(wèn)題。Objective-CCC相同的基本語(yǔ)法。您會(huì)看到所有熟悉句。您還可以訪問(wèn)標(biāo)準(zhǔn)Cstdlib.hstdio.h中聲明的那些例程。Objective-CANSIC塊Objective-C的這些方面,也不必?fù)?dān)心。隨著您讀完這篇文章的剩余部分,將會(huì)逐漸了解它除了提供在其他面向?qū)ο笳Z(yǔ)言中已有的多數(shù)抽象和機(jī)制之外,Objective-C還是一種非常動(dòng)態(tài)的程序設(shè)計(jì)語(yǔ)言,而期間就已固定下來(lái)。因此,Objective-C的動(dòng)態(tài)機(jī)制讓程序免受約束(編譯和鏈接程序時(shí)施加的約束);進(jìn)而在用如同其他大多數(shù)面向?qū)ο笳Z(yǔ)言那樣,Objective-C中的類,支持?jǐn)?shù)據(jù)的封裝,并定義對(duì)這些數(shù)據(jù)執(zhí)行的操作。對(duì)象Objective-C中某個(gè)類的規(guī)格需要兩個(gè)不同的部分:接口和實(shí)現(xiàn)。接口部分包含類聲明,并定義該類的公共接口。C代碼那樣,您定義頭文件和源代碼文件,將公共聲明與代碼的實(shí)現(xiàn)細(xì)節(jié)分開。(如果其他聲明是編程接口Objective-CC代碼。有時(shí)也稱為源文件Objective-CCC++代碼。僅當(dāng)您實(shí)際引用您的Objective-C代碼中的C++類或功能時(shí),才使用此擴(kuò)展名。#import當(dāng)您想要在源代碼中包括頭文件時(shí),請(qǐng)?jiān)陬^文件或源文件的前幾行之中,指定一個(gè)導(dǎo)入(#import)指令,#import是父類的名稱。在Objective-C中,一個(gè)類只能有一個(gè)父類。\h@interface...@end塊之外。#import@implementation#import@implementation-(id)initWithString:(NSString//codegoes+-(id)initWithString:(NSString//codegoes+(MyClass*)myClassWithString:(NSString//codegoesMyClass*myObject1;//StaticmyObject2;//DynamicNSStringMyClass*myObject1;//StaticmyObject2;//DynamicNSString*userName;//FromYourFirstiOSApp(static——發(fā)消息ecieCinsertObject:atIndex實(shí)例方法的聲明。(insertObject:atIndex:是所有簽名關(guān)鍵詞的串聯(lián),包括冒號(hào)字符。冒號(hào)字符表明有參實(shí)際上,Objective-C在運(yùn)行時(shí)才會(huì)執(zhí)行實(shí)際地發(fā)送。)消息包含方法名稱,以及方法所需的參數(shù)信息(類型要匹insertObject:atIndex消息發(fā)送[myArrayinsertObject:anObject[[myAppObjecttheArray]insertObject:[myAppObject[myArrayinsertObject:anObject[[myAppObjecttheArray]insertObject:[myAppObjectobjectToInsert]Objective-C還提供用于調(diào)用存取方法的點(diǎn)記法語(yǔ)法。存取方法獲取并設(shè)定對(duì)象的狀態(tài),因此對(duì)于封裝很重要,是myAppObject.theArray=[myAppObjectsetTheArray:aNewArray的另一種方式。在點(diǎn)記法表達(dá)式中,您不能使用對(duì)動(dòng)態(tài)類型化的對(duì)象(myAppObject.theArray=self.userName=在您的首個(gè)self.userName=對(duì)象。)C++中法聲明的語(yǔ)法,與實(shí)例方法聲明的語(yǔ)法相同,只是方法類型標(biāo)識(shí)符使用加號(hào)(+),而非減號(hào)。NSMutableArray*myArray=nil;//nilisessentiallyNSMutableArray*myArray=nil;//nilisessentiallythesameas//CreateanewarrayandassignittothemyArrayvariable.myArray=[NSMutableArrayarray];CocoaCocoaTouch(KVC),它的機(jī)制是,通過(guò)對(duì)象的名稱間@property(nonatomic,copy)NSStringObjective-C提供已聲明的屬性@property(nonatomic,copy)NSStringgettersetter方法。而是使用屬性聲明,指定您想要的行為。編譯器接著可以根據(jù)該聲明,創(chuàng)建或合成gettersetter方法。已聲明的屬性減少了您必須編@property(copy)MyModelObject*theObject;//Copythe@property(copy)MyModelObject*theObject;//Copytheobjectduring@property(readonly)NSView//Declareonlyagetter@property(weak)id//Declaredelegateasaweak@synthesizeenabled=@synthesizeenabled=@property(assign,getter=isEnabled)BOOLenabled;@property(assign,getter=isEnabled)BOOLenabled;//Assignnewvalue,changenameof(^是用作塊的語(yǔ)法標(biāo)記。塊的參數(shù)、返回值和正文(即執(zhí)行的代碼)存在其他類似的語(yǔ)法約定。下圖解intresult=myBlock(4);intresult=myBlock(4);//resultis-(id)addObserverForName:(NSString*)nameobject:(id)objqueue:(NSOperationQueue*)queueusingBlock:(void(^)(NSNotification*note))block-(id)addObserverForName:(NSString*)nameobject:(id)objqueue:(NSOperationQueue*)queueusingBlock:(void(^)(NSNotification*note))blockopQ=opQ=[[NSOperationQueuealloc][[NSNotificationCenterdefaultCenter]addObserverForName:@"CustomOperationCompleted"object:nilqueue:opQusingBlock:^(NSNotification*notif)//handletheUIApplication類實(shí)現(xiàn)一個(gè)應(yīng)用程序必需的行為。UIApplicationUIApplication進(jìn)行子UIApplicationDelegate協(xié)議的對(duì)象,可以接收那些通知,并提供適當(dāng)?shù)捻憫?yīng)。@interfaceHelloWorldViewController:UIViewController<UITextFieldDelegate>在接口塊中,您指定您的類符合或采用一個(gè)協(xié)議,方法是將該協(xié)議的名稱,放在尖括號(hào)(<...>)中,并且放在它@interfaceHelloWorldViewController:UIViewController<UITextFieldDelegate>@protocol@protocol-(void)myProtocolMethod;Objective-C@interfaceNSDate這行代碼通過(guò)使用圓括號(hào)將類別名稱括起來(lái)的語(yǔ)法約定,聲明了該類別。類別@interfaceNSDate您還可以使用稱為類擴(kuò)展的匿名類別,在實(shí)現(xiàn)(.m)文件中聲明專有屬性和專有方法。類擴(kuò)展看起來(lái)類似于類別,@interfaceMyAppDelegate@interfaceMyAppDelegate@property(strong)MyDataObject*data;Objective-C@符號(hào)為前綴的編譯器指令,@interface和@end。其他保留的術(shù)語(yǔ),包括已定義的類型以及與這些類型相配的字面常量。Objective-C使用很多已定義的類型和字面常量,這些卻不會(huì)出現(xiàn)在ANSIC中。在某些情況下,這些類型和字面常量替換ANSIC相應(yīng)的類型和字面常量。下表介紹幾種重要類型,包括每種類型的允許字面常量。選擇器的數(shù)據(jù)類型BooleanYESNONSDateNSDate*dateOfHire=[employeedateOfHire];if(dateOfHire!=nil){//handlethisNSDate*dateOfHire=[employeeNSDate*dateOfHire=[employeedateOfHire];if(dateOfHire){//handlethisif([employeedateOfHire])//handleif([employeedateOfHire])//handlethisBOOLequal=BOOLequal=[objectAisEqual:objectB];if(equal==YES){//handlethisnilnil的消息的返回值正常運(yùn)Cthissuperself,但在消息表達(dá)式中,只self,運(yùn)行時(shí)先在當(dāng)前對(duì)象的類中查找方法實(shí)現(xiàn);如果在那里找不到方法,則在其超類中查找(依此類推)super,運(yùn)行時(shí)先在超類中查找方法實(shí)現(xiàn)。[self[selfNSString*theName=NSString*theName=FoundationiOSOSX編程的基礎(chǔ)工具箱。您需要熟悉此工具箱,才能成功地根類及相關(guān)協(xié)議。NSObjectObjective-C值類。值類產(chǎn)生的實(shí)例稱為值對(duì)象(wrapper),用于基本的數(shù)據(jù)類型(如字集(collection)類。集類的實(shí)例(稱為集)管理一組的對(duì)象。區(qū)分特定集類型的關(guān)鍵,在于它讓您如何使用所包含的對(duì)象。集(collection)中的項(xiàng)通常是值對(duì)象。Objective-CObjective-CNSObjectObjective-C類生出它們作為Objective-C對(duì)象的基本特性。NSObject實(shí)例本身來(lái)說(shuō),除了是一個(gè)簡(jiǎn)單的對(duì)象外,沒有其他實(shí)質(zhì)作用。要給您的程序添加任何特定的屬在對(duì)象圖中相隔很遠(yuǎn)),應(yīng)用程序不得不尋找其他的通信方式。CocoaTouch和Cocoa框架具有許多機(jī)制和技alloc消息給該對(duì)象的類,來(lái)獲得該類的一個(gè)―原始‖(未初始化)的實(shí)例。分配對(duì)象時(shí),Objective-C運(yùn)行時(shí)會(huì)從應(yīng)用程序的虛擬內(nèi)存,為對(duì)象分配足夠的內(nèi)存。除分配內(nèi)存以外,運(yùn)行時(shí)在分配期間還做-(id)initFileURLWithPath:(NSString*)path-(id)initFileURLWithPath:(NSString*)pathNSURLNSURL*aURL=[[NSURLalloc]initFileURLWithPath:NSTemporaryDirectory()nilObjective-Cnil而不會(huì)有負(fù)面后果(例如,不會(huì)拋出異 type)className...(className不包括任何前綴-(id)initWithFormat:(NSString*)format,+(id)stringWithFormat:(NSString-(id)initWithFormat:(NSString*)format,+(id)stringWithFormat:(NSString*)format,NSString*myString=NSString*myString=[NSStringstringWithFormat:@"Customer:%@",Objective-C程序中的對(duì)象可構(gòu)成對(duì)象圖:即通過(guò)每個(gè)對(duì)象與其他對(duì)象的關(guān)系,或?qū)ζ渌麑?duì)象的引用,而構(gòu)成的一注:Objective-C(AutomaticReferenceCounting,ARC)。ARC使顯式內(nèi)存管理(也就是說(shuō),保留和釋放對(duì)象)變得不再必要。您應(yīng)該經(jīng)常在新應(yīng)用程序項(xiàng)目中使用ARC,這也是默認(rèn)的CObjective-C結(jié)構(gòu)(如全局變量、實(shí)例變量和局部變量)在對(duì)象之間形成引用。其中每個(gè)結(jié)構(gòu)都默認(rèn)情況下,Objective-C中的引用是強(qiáng)引用。這通常是件好事,讓編譯器能夠管理對(duì)象的運(yùn)行時(shí)長(zhǎng),這樣對(duì)象就ABB、C、DE的子圖形將―永遠(yuǎn)‖存在,因?yàn)檫@些對(duì)象通過(guò)強(qiáng)引用循環(huán)綁定在一起。通過(guò)引入E至B的弱引用,您斷開了此強(qiáng)引用循環(huán)。 weak限定符,以將引用標(biāo)記為弱。有關(guān)屬性,請(qǐng)使用weak選項(xiàng)。您應(yīng)該將弱引用用于以下種類的引@property(weak)id您將在―設(shè)計(jì)模式‖文章@property(weak)id@property(weak)IBOutletNSStringOutlet是對(duì)象之間的連接(或引用)nibnibnib(@property(weak)IBOutletNSString(void)setTarget:(idblock(void)setTarget:(idblocktypeof(self)tmpSelf=[selfmethodThatTakesABlock:^{[tmpSelfdoSomething];selfweak(或[selfmethodThatTakesABlock:^{[tmpSelfdoSomething];jecieCObjective-C框架中,不可變類的實(shí)例通常用來(lái)封裝離散的或緩沖的一組值,如數(shù)組和字符串。這些類通常具有散值的部分不可變對(duì)象(NSNumberNSDate)沒有可變類變體。(C數(shù)據(jù)類型Objective-C編程中很重要。您會(huì)頻繁遇到這些對(duì)象,作為應(yīng)用程序調(diào)用的方法和函數(shù)的參數(shù)和返回值。(collections)中使用它們,也可以在任何需要對(duì)象的地方使用它們。但是,對(duì)象值除這些共性和由此產(chǎn)生的必然性作。例如,NSString類具有用于搜索和替換子字符串、將字符串寫入文件或(首選)URL以及構(gòu)建文件系統(tǒng)路有時(shí),使用基本類型(int(整型)、float等的值)更高效、更直接。這種情況的一個(gè)主要例子是計(jì)算數(shù)值。因此,NSNumberNSValue對(duì)象在框架方法中,較少用作參數(shù)和返回值。但是,許多框架聲明了它們NSIntegerCGFloat。您應(yīng)該在合適的地方使intn=intn=5;//ValueassignedtoprimitiveNSNumber*numberObject=[NSNumbernumberWithInt:n];//Valueobjectcreatedfromprimitiveinty=[numberObjectintValue];//Encapsulatedvalueobtainedfromvalueobject(y==n)方法,來(lái)將字符串和二進(jìn)制數(shù)據(jù)寫入文件或URL指定的位置。以下示例中的代碼調(diào)NSURL*theURL=//CodethatNSURL*theURL=//CodethatcreatesafileURLfromastringpath...NSData*theData=[[NSDataalloc]initWithContentsOfURL:theURL];//use[theDatawriteToURL:theURLcopy選項(xiàng)。NSStringC的超集,Objective-CC相同:?jiǎn)蝹€(gè)字符使用單引號(hào)括起來(lái),字符串則使用雙引號(hào)括起來(lái)。但是,Objective-C框架通常不使用CNSString對(duì)象。NSString*greeting=[[NSStringalloc]NSString*greeting=[[NSStringalloc]initWithFormat:@"Hello,%@!",//Createthestring"MyString"pluscarriagereturn.NSString*myString=@"MyString\n";//Createthe//Createthestring"MyString"pluscarriagereturn.NSString*myString=@"MyString\n";//Createtheformattedstring"1NSString*anotherString=[NSStringstringWithFormat:@"%d%@",1,//CreateanObjective-CstringfromaCNSString*fromCString=[NSStringstringWithCString:"ACstring"NSNumberNSNumber=NSNumber*myDoubleValue=Objective-CNSNumber=NSNumber*myDoubleValue=NSNumberBooleanNSNumber*myBoolValue=NSNumber*myCharValue=NSNumber(unsignedintegers)(longintegers)(longNSNumber*myBoolValue=NSNumber*myCharValue=NSNumber*myFloatValue=NSNumber*myFloatValue=時(shí)間間隔(以秒為單位)。該參考日期是GMT2001年1月1日開始的那一刻。區(qū)和時(shí)間約定所提供的關(guān)聯(lián)。幸運(yùn)的是,有一些Foundation類可以表示這些概念性實(shí)體:NSCalendarNSDateComponents——NSTimeZone——NSLocale——NSDate*now=NSDate*now=[NSDatedate];//NSCalendar*calendar=[[NSCalendaralloc]initWithCalendarIdentifier:NSGregorianCalendar];[calendarsetTimeZone:[NSTimeZonesystemTimeZone]];//3NSDateComponents*dc=[calendarcomponents:(NSHourCalendarUnit|NSMinuteCalendarUnit|NSSecondCalendarUnit)fromDate:now];//4NSLog(@"Thetimeis%d:%d:%d",[dchour],[dcminute],[dcsecond]);//使用表示時(shí)區(qū)(在―系統(tǒng)偏好設(shè)置‖中指定的時(shí)區(qū))集(collection)是一個(gè)對(duì)象,它以特定方式儲(chǔ)存其他對(duì)象,并且允許客戶端訪問(wèn)那些對(duì)象。您通常將集作為方法和FoundationCocoaTouchCocoa(array)、字典(dictionary)和集合(set)。這些集的類具有不可變變體和可變變體。可變集允許您添加和移除對(duì)象,而不可變NSArrayNSMutableArray——(即索引)NSDictionaryNSMutableDictionary——NSSetNSMutableSet——集合儲(chǔ)存一組無(wú)序?qū)ο?,其中每個(gè)對(duì)象僅出現(xiàn)一次。一般是將測(cè)試或過(guò)01//ComposeastaticarrayofstringNSString//ComposeastaticarrayofstringNSString*objs[3]={@"One",@"Two",//Createanarray//CreateanarrayobjectwiththestaticNSArray*arrayOne=[NSArrayarrayWithObjects:&(*objs)//Createanarraywithanil-terminatedlistofNSArray*arrayTwo=[[NSArrayalloc]initWithObjects:@"One",@"Two",@"Three",NSArray*myArray=@[NSArray*myArray=@[@"HelloWorld",@67,[NSDatedate]objectAtIndex(0開始NSString*theString=[arrayTwoobjectAtIndex:1];//NSString*theString=[arrayTwoobjectAtIndex:1];//returnssecondobjectinidtheObject=idtheObject=——這是稱為枚舉的過(guò)程。您通常枚舉數(shù)組,orfor(typevariableinarray){/*inspectvariable,dosomethingwithit*/NSArrayNSArray*myArray=//getfor(NSString*cityNameinmyArray)if([cityNameisEqualToString:@"Cupertino"]){NSLog(@"We'renearthemothership!");NSArray*myArray=//get[myArrayenumerateObjectsUsingBlock:^(idNSArray*myArray=//get[myArrayenumerateObjectsUsingBlock:^(idobj,NSUIntegeridx,BOOL*stop){if([objisEqual:@"Cupertino"]){NSLog(@"We'renearthe*stop=NSArray具有其他方法用于給數(shù)組排序、搜索數(shù)組和在數(shù)組中的每個(gè)對(duì)象上調(diào)用方法。addObject方法,可將對(duì)象添加到可變數(shù)組;對(duì)象放在數(shù)組末尾。您也可以使insertObject:atIndex:removeObject方法removeObjectAtIndex:方法,可以從可變數(shù)組中移除對(duì)象。NSMutableArrayNSMutableArray*myMutableArray=[NSMutableArrayarrayWithCapacity:1];NSDate*today=[NSDatedate];myMutableArray[0]=//Firstcreateanarrayofkeysand//FirstcreateanarrayofkeysandacomplementaryarrayofNSArray*keyArray=[NSArrayarrayWithObjects:@"IssueDate",@"IssueName",@"IssueIcon",nil]NSArray*valueArray=[NSArrayarrayWithObjects:[NSDatedate],@"NumerologyToday",self.currentIssueIcon,//Createadictionary,passinginthekeyarrayandvalueNSDictionary*dictionaryOne=[NSDictionarydictionaryWithObjects:valueArray//CreateadictionarybyalternatingvalueandkeyandterminatingwithNSDictionary*dictionaryTwo=[[NSDictionaryalloc]initWithObjectsAndKeys:[NSDatedate],@"IssueDate",@"NumerologyToday",@"IssueName",self.currentIssueIcon,@"IssueIcon",nilNSDictionary@{key:value…},其中―…‖NSDictionaryNSDictionary*myDictionary=@{@"name":NSUserName(),@"date":[NSDatedate],@"processInfo":[NSProcessInfoNSDate*date=NSDate*date=[dictionaryTwoNSString*theNameNSString*theName=NSMutableDictionaryNSMutableDictionary*mutableDict=[[NSMutableDictionaryalloc]mutableDict[@"name"]=@"John-(void)touchesEnded:(NSSet*)toucheswithEvent:(UIEvent*)event{UITouch*theTouch=[touchesanyObject];//handlethe盡管集合對(duì)象在-(void)touchesEnded:(NSSet*)toucheswithEvent:(UIEvent*)event{UITouch*theTouch=[touchesanyObject];//handletheObjective-CNSObject類的強(qiáng)大且實(shí)用的功能,使您能在運(yùn)行時(shí)了解有關(guān)對(duì)象的某些東西。您因此可staticintsumstaticintsum=for(iditeminmyArray)if([itemisKindOfClass:[NSNumberclass]]){inti=(int)[itemintValue];sum+=isKindOfClassClassclass方法。接著評(píng)估此方法返回的Boolean值,并繼續(xù)相應(yīng)的操作。isKindOfClass告訴您,對(duì)象是否是該類或任何其后代類的成員。if([itemif([item[itemsetState:[self.arcView.fontisBold]?NSOnStaterespondsToSelectorObjective-C數(shù)據(jù)類型,用于方法的運(yùn)行時(shí)標(biāo)-(void)setDelegate:(idweak)obj{NSParameterAssert([objconformsToProtocol:delegate=obj;conformsToProtocol-(void)setDelegate:(idweak)obj{NSParameterAssert([objconformsToProtocol:delegate=obj;BOOLobjectsAreEqual=[obj1BOOLobjectsAreEqual=[obj1isEqual:obj2];if(objectsAreEqual){//doNSObject將指針相等用作比較基礎(chǔ)。任象和另一個(gè)Person對(duì)象的名字、姓氏和出生日期屬性都相符,則這兩個(gè)對(duì)象可能相等。FoundationisEqualToTypeType是類類型減去NS前綴,NSArray*myArray=[yourArrayNSArray*myArray=[yourArraymutableCopyNSMutableString的實(shí)例。它。大多數(shù)應(yīng)用程序都鏈接到Foundation、UIKit和CoreGraphics框架。根據(jù)您為應(yīng)用程序選取的模板,可能查看HelloWorld.xcodeproj在Xcode中打開HelloWorld.xcodeproj項(xiàng)目(如果尚未打開的話)。您前已在教程您的首個(gè)iOS應(yīng)iOS系統(tǒng)的一個(gè)層。每個(gè)層都建立在它的下層之上。盡可能使用較高級(jí)的框架,而非較低級(jí)的框iOSFoundationUIKitFoundationUIKitFoundation您的應(yīng)用程序以及UIKit和其他框架,都建立在Foundation框架的基礎(chǔ)結(jié)構(gòu)之上。Foundation框架提供許多基IPURL在iOS應(yīng)用程序FoundationNSString類的實(shí)例,將用戶的輸userName中。您還使用了FoundationinitWithFormat:,創(chuàng)建問(wèn)候語(yǔ)字符串。UIKitiOSUIKitUIKit處理事件,以及創(chuàng)建通用用戶界面元素。UIKit還通過(guò)管理屏幕上顯示的內(nèi)容,來(lái)組織復(fù)雜的應(yīng)用程序。在您的首個(gè)iOS應(yīng)用程序UIKitUIApplicationMain函數(shù),CoreData、CoreGraphics、CoreAnimationOpenGLES框架,是對(duì)于應(yīng)用程序開發(fā)很重要的高級(jí)技術(shù),因CoreDataCoreDataCoreData,您可以創(chuàng)建模型對(duì)象(稱為被管理的對(duì)象)。您管理那些對(duì)象之間的關(guān)系,并通過(guò)框架更改數(shù)據(jù)。CoreData利用內(nèi)建的SQLite技術(shù),高效地儲(chǔ)存和管理數(shù)據(jù)。CoreCoreGraphicsiOSiOS中創(chuàng)建圖形的最簡(jiǎn)易便捷方法,是將預(yù)渲染的UIKitiOS完成繪圖。UIKit還提供用于自定繪圖的類,包括路徑、顏色、圖案、漸變、圖像、文本和變換。盡可能地使用UIKit(較高級(jí)的框架),而非CoreGraphics(較低級(jí)的iOSOSXCoreGraphics。CoreGraphics框架也稱Quartz,它在這兩個(gè)平臺(tái)上幾乎相同。CorePDFCoreAnimationUIKitCoreAnimationUIKit功能的高級(jí)動(dòng)畫,可以直接使用CoreAnimation。CoreAnimation接口包含在QuartzCore框架中。借助CoreAnimation,您創(chuàng)建不同層次CoreAnimation視圖式抽象,您可以創(chuàng)建動(dòng)態(tài)用戶界面,而無(wú)需使用低級(jí)的圖形API,如OpenGLES等。CoreOpenGLES2D和3DOpenGLES2D3D繪圖。AppleOpenGLES標(biāo)準(zhǔn),與設(shè)備硬件緊密協(xié)作,為全屏幕游OpenGL2D3DiOSAPIOSXAPI如果您是Mac開發(fā)者,您會(huì)發(fā)現(xiàn)Cocoa和CocoaTouch應(yīng)用程序都基于類似的技術(shù)。它們具有共同的API,Cocoa遷移更簡(jiǎn)單。事實(shí)上,部分框架是相同(或幾乎相同)FoundationCoreData。但是,OSX相應(yīng)的框架有差異。AppKitUIKitMaciOS時(shí),iOSTechnologyOverview(iOS技術(shù)概述)中的―MigratingfromCocoa‖(從Cocoa遷移)。將HelloWorld.xcodeprojXcodeHelloWorld.xcodeproj項(xiàng)目(如果尚未打開的話)HelloWorld(+)iOSTechnologyOverview(iOS技術(shù)概述)您為iOS或OSX開發(fā)應(yīng)用程序時(shí),不會(huì)是完全孤立的。您將沿用Apple和其他人的勞動(dòng)成果,沿用他們?cè)贠bjective-C框架中開發(fā)和收集的類??蚣苁沁\(yùn)行時(shí)可供多個(gè)進(jìn)程共享的類資源庫(kù);它包含支持采用該資源庫(kù)進(jìn)行軟件開發(fā)的資源。Cocoa和CocoaTouch框架,為您提供了一組相互依賴的類,它們共同工作,以構(gòu)成應(yīng)用程針對(duì)您要編寫的程序,您可以按需從一個(gè)C函數(shù)庫(kù)中選用函數(shù),并確定何時(shí)調(diào)用它們。另一方面,框架會(huì)將某種(hook),個(gè)事件。下圖說(shuō)明了iOS中CocoaTouch應(yīng)用的主要事件循環(huán)。Cocoa和CocoaTouch框架不光是將提供各自服務(wù)的各個(gè)類混雜在一起的雜物袋。這些面向?qū)ο蟮目蚣苁穷惖亩?,Objective-C框架就像房屋的框架,而應(yīng)用程序代碼就好比大門、窗戶、壁板和其他元素,是這些東西讓房CocoaTouchCocoa框架,也包括架構(gòu)CocoaCocoaTouch框架(如UIKit)定義的結(jié)構(gòu),因?yàn)槭欠盒徒Y(jié)構(gòu),可供很多類型的應(yīng)用程序共享。因?yàn)榻Y(jié)構(gòu)是泛型的,所以有一些例如,創(chuàng)建iOS應(yīng)用程序UIViewControllerUIKit框架的其他類。要找出iOS資源庫(kù)(AppleDeveloper)。iOSDeveloperLibrary打開在內(nèi)容區(qū)域。點(diǎn)按文稿名稱,打開列出所有UIKit類和協(xié)議的頁(yè)面。定義子類實(shí)例扮演的角色。在開發(fā)iOS或OSX應(yīng)用程序時(shí),―模型-視圖-控制器‖設(shè)計(jì)模式用于為iOSUIView(為UIKit框架中的基礎(chǔ)視圖類)iOSOSX應(yīng)用程序編程中具有重要作用,但有時(shí)候不是解決問(wèn)題的最佳方式。如果只想要為(myMethod)的假設(shè)方法調(diào)用setNeedsDisplay方法??蚣茏鲆恍┕ぷ鳛槔L制drawRect:,該方法則由自定類覆蓋,以執(zhí)行實(shí)際的繪制。通過(guò)發(fā)送消息(與調(diào)用方法的消息相同)supersuper,您就將該方法的Celebrate類,定義了一個(gè)稱super的方式:Objective-C編程中,繼承是添加應(yīng)用程序特定行為的一種方式。創(chuàng)建的現(xiàn)有類的子類,要么增加超類的屬性和系統(tǒng)結(jié)構(gòu)方面‖(encapsulatetheaspectsofsystemstructurethatvary)和―面向接口編程,而非面向?qū)崿F(xiàn)編程‖(programtoaninterface,notanimplementation)。它們表達(dá)了重要的見解。例如,封裝原則告訴我們,如果隔您會(huì)發(fā)現(xiàn),設(shè)計(jì)模式的應(yīng)用貫穿于整個(gè)CocoaTouch和Cocoa框架、Objective-C的運(yùn)行時(shí)及程序設(shè)計(jì)語(yǔ)言自CocoaTouchCocoa框架相同的模式,您的代碼往往會(huì)更好地―模型-視圖-控制器‖(Model-View-Controller)設(shè)計(jì)模式,通常被稱為―MVC‖,將以下一種角色分配給應(yīng)用程序中MVC類型的對(duì)象的集合,有時(shí)統(tǒng)稱為層,例如模型層。iOSMac應(yīng)用程序而言,MVC對(duì)一個(gè)好的設(shè)計(jì)至關(guān)重要。采用此設(shè)計(jì)的好處多不勝數(shù)。這MVC設(shè)計(jì)的應(yīng)用程序,也比其MVC的,也要求您的自定對(duì)象扮演其中一個(gè)MVC角色。您可能還沒有意識(shí)到,就已經(jīng)創(chuàng)建了一個(gè)基于MVC的應(yīng)用程序:您的首個(gè)iOS應(yīng)用程序中的HelloWorld。模userName屬性(NSString對(duì)象)HelloWorldViewController類聲明和管理。HelloWorldViewControllerHelloWorldAppDelegate類的實(shí)例,是應(yīng)用程序的控制器對(duì)象;而應(yīng)用有關(guān)―模型-視圖-控制器‖ConceptsinObjective-CProgramming(Objective-C編程中的概MVC應(yīng)用程iOS,UIKit框架提供了視圖OSX,AppKitUIKitUIViewAppKitNSView類。Objective-C您的首個(gè)iOS應(yīng)用程序HelloWorldHelloWorldAppDelegateXcode自有兩個(gè)可編程的組件用于委托。委托類必須定義屬性(delegate的約定),以保存一個(gè)指向委托的(請(qǐng)參閱以下部分以獲得有關(guān)協(xié)議的更多信息CocoaTouchCocoa正式采用XML代碼或拷貝對(duì)象。Apple提供的框架,聲明了數(shù)十個(gè)協(xié)議。此外,您的應(yīng)用程序可以聲明自定協(xié)議,讓類可以采用。協(xié)議是您編程工具箱的一部分。ProgrammingwithObjective-C(使用Objective-C編程)對(duì)協(xié)議進(jìn)行了綜合描述。通知中心是(NSNotificationCenter類的實(shí)例)。該事件可以是發(fā)生在應(yīng)用程序中的任何事情,目標(biāo)-CocoaTo

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論