您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > iOS开发指南》样章 第一个iOS应用程序
12第一个iOS应用程序控制台输出HelloWorld是我学习C语言的第一步,也是我人生中非常重要的一步。在多年后的今天,我希望仍以HelloWorld作为第一步,为大家开启一个神奇、瑰丽的世界——iOS。下面,让我们用HelloWorld开启iOS的大门,开始我们的探索之旅。本章是以HelloWorld作为切入点,向大家系统介绍什么是iOS应用以及如何使用Xcode创建iOS应用。2.1创建基于nib的HelloWorld工程在学习之初,我们有必要对iOS工程做一个整体概览,而这正是HelloWorld的重要使命所在。之后,我们将详细阐述操作过程中涉及的重要知识点。����HelloWorld的使命:尽可能简单明了地向大家介绍什么是iOS工程以及如何创建工程。�工程实现的功能:在页面上展示字符HelloWorld(效果如图2-1所示)。�包含控件:Label(标签控件)。图2-1HelloWorld的iPhone画面从第2章22.1.1创建工程启动Xcode,点击File→New→Project菜单,在打开的Chooseatemplateforyournewproject界面中,选择SingleViewApplication工程模板(如图2-2所示)。图2-2选择工程模板然后点击Next按钮,随即出现图2-3所示的界面。图2-3新工程中的选项这里我们需要按照提示并结合自己的实际情况和需要输入相关内容。下面简要说明图2-3中的选项。�ProductProductProductProductNameNameNameName:工程名字。�OrganizationOrganizationOrganizationOrganizationNameNameNameName:组织名字。�CompanyCompanyCompanyCompanyIdentifierIdentifierIdentifierIdentifier:公司标识(很重要)。一般是将公司的域名倒过来输入进去(如3com.51work6),这类似于Java中的包命名。�BundleBundleBundleBundleIdentifierIdentifierIdentifierIdentifier:捆绑标识符(很重要)。该标识符由ProductName+CompanyIdentifier构成。因为在AppStore发布应用的时候会用到它,所以它的命名不可重复。�ClassClassClassClassPrefixPrefixPrefixPrefix:类的前缀。为生成的类加前缀(如XZYViewController)。�DevicesDevicesDevicesDevices:选择设备。可以构建基于iPhone或iPad的工程,也可以构建通用工程。通用工程是指一个工程可以同时适应iPhone和iPad,不论在iPhone上还是iPad上都可以正常运行。����UseUseUseUseStoryboardsStoryboardsStoryboardsStoryboards:工程是否采用故事板技术。�UseUseUseUseAutomaticAutomaticAutomaticAutomaticReferenceReferenceReferenceReferenceCountingCountingCountingCounting:工程是否采用ARCARCARCARC(自动引用计数)技术。ARC可以帮助我们管理工程的内存。����IncludeIncludeIncludeIncludeUnitUnitUnitUnitTestsTestsTestsTests:是否产生单元测试相关的类。设置完相关的工程选项后,点击Next按钮,进入下一级页面。根据提示选择存放文件的位置,然后点击Create按钮,将出现如图2-4所示的界面。图2-4新创建的工程在右下角的对象库中选择Label控件,将其拖曳到View上并调整其位置。双击Label控件,使其处于编辑状态(也可以通过控件的属性来设置),在其中输入HelloWorld,如图2-5所示。4图2-5添加Label控件至此,整个工程创建完毕。点击图2-4左上角的Run按钮,即可看到运行结果。我们在没有输入一行代码的情况下,就已经利用Xcode工具的SingleViewApplication模板创建了一个工程,并成功运行,Xcode之强大可见一斑。2.1.2Xcode中的iOS工程模板从图2-2可以看出,iOS工程模板分为3类:Appliction、Framework&Library和其他,下面详细介绍一下。1.Application类型Application类型可以创建iOS应用程序,我们大部分的开发工作都是从这里开始的。该类共包涵7个模板,具体如下所示。�Master-DetailMaster-DetailMaster-DetailMaster-DetailApplicationApplicationApplicationApplication。可以构建树形结构导航模式应用,生成代码中包含了导航控制器、表视图控制器等。�OpenGLOpenGLOpenGLOpenGLGameGameGameGame。可以构建基于OpenGLES的游戏应用。����Page-BasedPage-BasedPage-BasedPage-BasedApplicationApplicationApplicationApplication。可以构建类似于电子书效果的应用,这是一种平铺页面导航。����SingleSingleSingleSingleViewViewViewViewApplicationApplicationApplicationApplication。可以构建简单的单个视图应用。�TabbedTabbedTabbedTabbedApplicationApplicationApplicationApplication。可以构建标签导航模式的应用,生成的代码中包含了标签控制器、标签栏等。����UtilityUtilityUtilityUtilityApplicationApplicationApplicationApplication。可以构建实用型的应用程序,它会生成两个视图控制器——主视图控制器和子视图控制器。在iPhone中子视图以模态方式呈现,在iPad中子视图以Popover(弹出气泡)形式呈现。����EmptyEmptyEmptyEmptyApplicationApplicationApplicationApplication。可以构建一个空应用程序,需要我们自己添加视图等对象。该模板很少使用。2.Framework&Library类型5Framework&Library类型的模板如图2-6所示,它可以构建基于CocoaTouch的静态库。图2-6Framework&Library类型模板说明出于代码安全和多个工程重用代码的考虑,我们需要将一些类或者函数编写成静态库。静态库不能独立运行,编译成功时会生成名为libXXX.a的文件(例如libHelloWorld.a)。3.其他类型如图2-7所示,利用该类型我们可以构建应用的内置付费内容包(In-AppPurchaseContent)和空工程。使用内置付费内容包,可以帮助我们构建具有内置收费功能的应用。图2-7Other类型模板根据需要选用不同的工程模板,可以大大减少我们的工作量。62.1.3应用剖析在创建HelloWorld的过程中,生成了很多文件(展开Xcode左边的项目导航视图可以看到,如图2-8所示),它们各自的作用是什么,彼此间又是怎样的一种关系呢?图2-8项目导航视图如图2-8所示,导航视图下有HelloWorld、Frameworks和Products三个组。在HelloWorldHelloWorldHelloWorldHelloWorld组中共有两个类:AppDelegate和ViewController,以及一个组SupportingFiles。我们主要的编码工作就是在AppDelegate和ViewController这两个类中进行的,它们的类图如图2-9所示。UIResponderAppDelegateUIViewControllerViewControllerDelegateUIApplicationDelegate图2-9HelloWorld工程中的类图AppDelegateAppDelegateAppDelegateAppDelegate是应用程序委托对象,它继承了UIResponder类,并实现了UIApplicationDelegate委托协议。UIResponder类可以使子类AppDelegate具有处理相应事件的能力,而UIApplicationDelegate委托协议使AppDelegate能够成为应用程序委托对象,这种对象能够响应应用程序的生命周期。相应地,AppDelegate的子类也可以实现这两个功能。ViewControllerViewControllerViewControllerViewController类继承自UIViewController类,它是视图控制器类,在工程中扮演着根视图、用户事件控制类的角色。需要特别指出的是,ViewController.xib文件也是视图控制文件,起描述作用,与ViewController配套存在。AppDelegate和ViewController类与main代码模块的主函数存在一种直接的调用关系,下面我们借助UML时序图来进行详细说明,见图2-10。71:实例化mian.mAppDelegate.mViewController.m2:实例化main主函数application:didFinishLaunchingWithOptions:图2-10HelloWorld启动时序图在图2-10中,在HelloWorld启动过程中,首先调用main.m代码模块的main主函数进行AppDelegate的实例化,具体代码如下所示:intmain(intargc,char*argv[]){@autoreleasepool{returnUIApplicationMain(argc,argv,nil,NSStringFromClass([AppDelegateclass]));}}AppDelegate类是应用程序委托对象,这个类中继承的一系列方法在应用生命周期的不同阶段会被回调。启动HelloWorld时,首先会调用application:didFinishLaunchingWithOptions:方法,该方法的代码如下:-(BOOL)application:(UIApplication*)applicationdidFinishLaunchingWithOptions:(NSDictionary*)launchOptions{self.window=[[[UIWindowalloc]initWithFrame:[[UIScreenmainScreen]bounds]]autorelease];self.viewController=[[[ViewControlleralloc]initWithNibName:@ViewControllerbundle:nil]autorelease];self.window.rootViewController=self.viewController;[self.windowmakeKeyAndVisible];returnYES;}在该方法中共做了3件事:实例化UIWindow,实例化ViewController,然后把ViewController作为根视图控制器放到UIWindow上。每一个iOS应用都有一个UIWindow对象,而每一个UIWindow对象上面都一个根视图,它所对应的控制器为根视图控制器(ViewController),UIWindow对象
本文标题:iOS开发指南》样章 第一个iOS应用程序
链接地址:https://www.777doc.com/doc-4845099 .html