Objective-C应用开发全程实录

978-7-115-43720-4
作者: 李梓萌
译者:
编辑: 张涛

图书目录:

详情

本书循序渐进的全面剖析了Objective-C语言的应用,并结合iOS9进行学习应用,解决了传统Objective-C书只注重语法讲解而忽视iOS开发的应用。案例关注iOS9主推的智能家居、健康应用、苹果手表、游戏开发等领域,并且在讲解过程中,细致讲解了每一个知识点的具体原理和具体用法。

图书摘要

版权信息

书名:Objective-C应用开发全程实录

ISBN:978-7-115-43720-4

本书由人民邮电出版社发行数字版。版权所有,侵权必究。

您购买的人民邮电出版社电子书仅供您个人使用,未经授权,不得以任何方式复制和传播本书内容。

我们愿意相信读者具有这样的良知和觉悟,与我们共同保护知识产权。

如果购买者有侵权行为,我们可能对该用户实施包括但不限于关闭该帐号等维权措施,并可能追究法律责任。

• 编  著 李梓萌    

  责任编辑 张 涛

• 人民邮电出版社出版发行  北京市丰台区成寿寺路11号

  邮编 100164  电子邮件 315@ptpress.com.cn

  网址 http://www.ptpress.com.cn

• 读者服务热线:(010)81055410

  反盗版热线:(010)81055315


本书共32章,循序渐进地讲解了Objective-C开发iOS应用程序的基本知识。本书从搭建开发环境讲起,依次讲解了Objective-C的基础,如常量、变量和数据类型,运算符和表达式,选择结构,循环结构;Objective-C的高级知识,如类、对象和方法、继承、多态、动态类型和异常处理;Objective-C的实战技术,如Foundation框架类详解,日期、时间、复制和谓词,文件操作,Xcode Interface Builder界面开发,使用Xcode编写MVC程序,基础控件,Web视图控件,可滚动视图控件和翻页控件,提醒、操作表和表视图,活动指示器、进度条和检索条,UIView和视图控制器,图形、图像、图层和动画,多媒体应用,定位处理,触摸、手势识别和Force Touch,Touch ID,游戏开发等。本书内容全面,几乎涵盖了Objective-C语言的核心语法知识和开发iOS应用程序所需要的主要技术,全书内容言简意赅,讲解方法通俗易懂,特别适合于初学者学习。

本书适合Objective-C初学者、Objective-C开发人员、iOS初学者、iOS程序员、iPhone开发人员、iPad开发人员学习,也可以作为相关培训学校和大专院校相关专业的教学用书。


在编程语言使用率排行榜中,有一种语言从众多编程语言中脱颖而出,成为最近几年中耀眼的新星,这就是本书的主角——Objective-C。在过去的几年中,其市场占有率直线上升,成为了仅次于Java、C和C++之后的一个热门编程语言。本书将带领大家一起来学习用Objective-C进行开发的技术。

本书内容丰富,实例全面,我们的目标是通过一本图书,提供多本图书的价值。在内容的编写上,本书具有以下特色。

(1)基于新的iOS

北京时间2015年6月9日,苹果公司在WWDC 2015开发者大会上正式发布了新的iOS操作系统。本书详细讲解了使用Objective-C语言开发iOS应用程序的基本知识,展示了Objective-C语言在iOS应用程序中的作用。

(2)突出iOS的新特性

本书自始至终突出了iOS系统的新特性,重点剖析了iOS升级和变化方面的内容,例如苹果手表的升级和针对iPad产品的升级。本书不但讲解了这些新特性的基本知识,而且用具体实例进行了演示。

(3)讲解苹果公司力推的新应用技术

本书内容新颖全面,讲解了从iOS开始具有或发展起来的新技术,这些新技术是苹果公司力推的。例如HomeKit、HealthKit、WatchOS 2和Touch ID,这些内容是市面上同类书籍所没有涉及的。

(4)结构合理

从读者的实际需要出发,科学安排知识结构,内容由浅入深,叙述清楚。全书详细地讲解了使用Objective-C语言开发iOS应用程序的知识点。

(5)易学易用

读者可以按照本书编排的章节顺序进行学习,也可以根据自己的需求对某一章节进行有针对性地学习。书中提供的丰富实例可以帮助读者学以致用。

(6)实例多(301个典型实例+1个综合实例),实用性强

本书彻底摒弃枯燥的理论和简单的操作,注重实用性和可操作性。本书一共介绍了301个典型实例和1个综合性实例,通过实例的实现过程,详细讲解了Objective-C语言各个知识点的具体使用方法。

(7)内容全面

无论是搭建开发环境、Objective-C语言的基本语法、面向对象的介绍,还是iOS的控件接口、网络、多媒体和动画及游戏应用开发,以及健康、家居、苹果手表等知识的讲解,都是当今热门应用。

(8)视频全面讲解,提供PPT教学资源

为了帮助初学者更加高效地看懂并掌握本书内容,本书提供了内容全面的配套视频。视频中不但讲解了本书的重要知识点,而且详细讲解并演示了书中的每一个实例。另外,为了方便广大教师的教学工作,特意提供了精美的PPT教学课件(从网站下载:www.toppr.net)。

为了更好地为读者服务,为大家提供一个完善的学习和交流平台。本书提供了读者交流QQ群(28316661),大家可以在里面学习交流,另外还提供了问题答疑和源程序、PPT 详件下载地址www.toppr.net

本书在编写过程中,得到了人民邮电出版社工作人员的大力支持,正是基于各位编辑的求实、耐心和高效,才使得本书在这么短的时间内出版。另外,也十分感谢我的家人,在我写作的时候给予的大力支持。由于本人水平有限,纰漏和不尽如人意之处在所难免,诚请读者提出意见或建议,以便修订并使之更臻完善,编辑联系和投稿邮箱为zhangtao@ptpress.com.cn。

编 者


本篇内容


在国外权威编程语言使用率排行榜中,有一匹黑马从众多编程语言中脱颖而出,成为最近几年最耀眼的新星,这颗耀眼的新星就是我们本书的主角——Objective-C。本章将带领大家初步认识Objective-C这门神奇的技术,为读者学习本书后面的知识打下基础。

知识点讲解:光盘:视频\知识点\第1章\最耀眼的新星.mp4

在过去的两年中,Objective-C的市场占有率几乎直线上升。截至2015年4月,Objective-C成为了仅次于Java、C和C++之后的一门编程语言。本节将带领大家一起来认识这颗新星,探寻Objective-C如此火爆的秘密。

开始之前,先看看表1-1中的统计数据。

表1-1 编程语言排行榜(截至2015年4月)

2015年4月

2014年4月

语  言

占有率(%)

1

2

Java

16.041

2

1

C

15.745

3

4

C++

6.962

4

3

Objective-C

5.890

5

5

C#

4.947

表1-1所示为TIOBE于2015年5月公布的2015年4月编程语言排行榜。和以前月份的统计数据相比,前三的位置有所变动,C和Java依旧轮流占据前两位,本书讲解的Objective-C语言位于第4位。在此之前,Objective-C已经赢得了TIOBE 2011年“年度编程语言”,这个奖项是颁发给在2011年中市场份额增长最多的编程语言。Objective-C之所以取得如此辉煌的成就,这主要归功于iPhone和iPad的持续成功,这两种设备上的程序主要都由Objective-C实现。

注意

 

TIOBE编程语言社区排行榜是编程语言流行趋势的一个指标,每月更新。这份排行榜排名基于互联网上有经验的程序员、课程和第三方厂商的数量。排名使用著名的搜索引擎(诸如Google、MSN、雅虎)以及Wikipedia和YouTube进行计算。请注意这个排行榜只是反映某个编程语言的热门程度,并不能说明一门编程语言好不好,或者一门语言所编写的代码数量多少。这个排行榜可以用来考查你的编程技能是否与时俱进,也可以在开发新系统选择语言时作为参考。

2009年,Objective-C在7月份上升至21位,又在8月份打进前20名。

2009年10月,AppStore(程序商店)中的程序数量超过了10万。当时业界认为对于一款手机而言,除了强大的硬件支持以外,最受用户关注的便是后续软件支持,这也是智能手机之所以能够一跃超过非智能手机成为市场宠儿的最大原因。不少专家认同这样一个观点,凭借着为数众多并且力作不断的程序支持,苹果的手机产品iPhone在后期程序扩展能力方面的优势要明显高于其他品牌产品。

伴随着苹果研发出第五代以及后续iPhone产品,同期的程序数量更是非常可观。现在智能终端已经发展成一个巨大的平台,并且这一平台显然在未来的某一天要和PC、笔记本电脑等平起平坐。所以可以判断出,将来的Objective-C会有更好的发展前景。

2010年5月,Objective-C又给了大家一个惊喜。因为Objective-C历史性地打进了TIOBE编程语言排行榜的前十名。也是一个很震惊的成绩,因为自从2001年6月TIOBE编程语言排行榜发布以来,一共只有13个编程语言曾经进入前十名。Objective-C语言是唯一一种可以为iPhone和iPad编程的语言,它的火爆完全是因为基于Mac OS X平台和iPhone平台移动开发的热度升高所致。

2012年1月,Objective-C依据奠定了TIOBE编程语言排行榜第五名的位置。相信随着iPad和iPhone后续产品的推出,排名会更加稳固。

2012年11月,Objective-C成功占据了第三的位置,并且将和第四位的位置进一步拉大。

Objective-C通常写为ObjC、Objective C或Obj-C,是一门扩充了C语言的面向对象编程语言。Objective-C主要被用在Mac OS X和GNUstep等使用OpenStep标准的平台上,而在NeXTSTEP和OpenStep中也是被作为基本语言来使用的。Objective-C可以在gcc运作的系统中实现写和编译操作,因为gcc包含Objective-C的编译器。

Objective-C是在苹果Mac OS X上进行程序开发的首选语言。Mac OS X技术源自NeXTSTEP的OpenStep操作系统,而OpenStep的软件架构都是用Objetive-C编写的。这样,Objective-C就顺理成章地成为了Mac OS X上的最佳语言。

1986年,Brad Cox在第一个纯面向对象语言Smalltalk的基础上写成了Objective-C语言。在这之后,Brad Cox创立了StepStone公司,专门负责Objective-C的推广。1988年,Steve Jobs的NeXTSTEP采用Objective-C作为开发语言,1992年GNU GCC编译器中包含了对Objective-C的支持。这以后相当长的时间内,使用Objective-C语言的都是日后编程界的大腕,像Richard Stallman、Dennis Glating等人。

苹果公司之所以选择Objective-C作为开发语言,主要有以下原因。

(1)Objective-C是一个面向对象的语言。Cocoa框架中的很多功能只能通过面向对象的技术来呈现。

(2)Objective-C是标准C语言的一个超集,现存的C程序无须重新开发就能够使用Cocoa软件框架,并且开发者可以在Objective-C中使用C的所有特性,可以选择什么时候采用面向对象的编程方式(例如定义一个新的类),什么时候使用传统的面向过程的编程方式(定义数据结构和函数,而不是定义类)。

(3)Objective-C是一种简洁的语言,它的语法简单,没有歧义,并且易于学习。因为通常会将它和面向对象相关的技术术语混淆,所以对于初学者来说,学习面向对象编程的过程比较漫长。使用Objective-C这种结构良好的语言,修炼成为一个熟练的面向对象编程的程序员会更容易。

(4)和其他基于标准C语言的面向对象语言相比,Objective-C对动态机制支持得更为彻底。编译器为运行环境保留了很多对象本身的数据信息,因此某些在编译时需要做出的选择就可以推迟到运行时来决定。这种特性使得基于Objective-C的程序非常灵活和强大。例如,Objective-C的动态机制提供了如下两个一般面向对象语言很难提供的优点。

注意——混用C/C++编程

 

除了Objective-C之外,读者还可以用C/C++程序来编写iPhone程序和iPad程序,可以直接调用用C/C++编写的动态库和静态库。读者可以用纯C/C++进行开发,除此之外还可以用Objective-C和C/C++混合进行开发。读者可以在Objective-C代码里调用C++的方法,也可以在C++代码里调用Objective-C对象及方法,对象的指针在两种语言里都仅仅只是指针,可以在任何地方使用。

举个例子,读者可以把一个Objective-C对象用作C++类的数据成员,同时将一个C++对象作为Objective-C类的实例变量。需要注意的是,当编合使用Objective-C/C++的时候,Objective-C的.m实现文件需要改成.mm文件,这样以方便编译器识别。

知识点讲解:光盘:视频\知识点\第1章\Objective-C的优点和缺点.mp4

Objective-C是一门非常“实际”的编程语言,它用的是一个用C编写的很小的运行库,应用程序的规模增加很小。这一点和其他大部分OO(面向对象)语言不一样,它们通常使用很大的VM(虚拟机)执行程序。Objective-C写成的程序通常不会比其源码大很多。

Objective-C的最初版本并不支持垃圾回收。在当时这是人们争论的焦点之一,很多人考虑到Smalltalk回收会产生漫长的“死亡时间”,从而令整个系统失去功能。Objective-C为了避免这个问题,所以不再拥有这个功能。虽然在某些第三方版本已加入这个功能(尤其是GNUstep),但是Apple在其Mac OS X中仍未引入这个功能。不过令人欣慰的是,在Apple发布的xCode 4中开始支持自动释放。xCode 4中的自动释放,也就是ARC(Automatic Reference Counting)机制,不需要用户手动Release(释放)一个对象,而是在编译期间,编译器会自动添加那些以前经常写的“NSObject release”。

还有另外一个问题,Objective-C不包括命名空间机制,所以程序设计人员必须在其类别名称前加上前缀,这样经常会导致冲突。2004年,在Cocoa编程环境中,所有Mac OS X类别和函数均有“NS”作为前缀,例如NSObject或NSButton表示它们属于Mac OS X核心;使用“NS”是由于这些类别的名称是在NeXTSTEP开发时确定的。

虽然Objective-C是C语言的母集,但是它也不视C语言的基本类型为第一级的对象。和C++不同,Objective-C不支持运算符多载(它不支持ad-hoc多型)。但是和Java相同,Objective-C只允许对象继承一个类别(不允许多重继承)。Categories和protocols不但具有多重继承的许多优点,而且缺点很少,例如额外执行时间过长和二进制不兼容。

由于Objective-C使用动态运行时类型,而且所有的方法都是函数调用,有时甚至连系统调用syscalls也是如此,所以很多常见的编译时性能优化方法都不能应用于Objective-C,例如内联函数、常数传播、交互式优化与聚集等。这使得Objective-C性能劣于类似的对象抽象语言,例如C++。不过Objective-C拥护者认为,既然Objective-C运行时消耗较大,Objective-C本来就不应该应用于C++或Java常见的底层抽象。

知识点讲解:光盘:视频\知识点\第1章\搭建Objective-C开发环境.mp4

都说“工欲善其事,必先利其器”,这一说法在编程领域同样适用,学习Objective-C开发也离不开好的开发工具。Objective-C是建立在特定的开发平台——Mac OS之上的,所以开发工具也需要安装在Mac OS系统上才能发挥最大威力。在众多的开发工具中,Xcode被公认为是Objective-C的最佳开发工具。本节将详细讲解Xcode开发工具的相关知识,为读者后面的学习打下基础。

要开发iOS的应用程序,需要一台安装有Xcode工具的Mac OS X电脑。Xcode是苹果提供的开发工具集,提供了项目管理、代码编辑、创建执行程序、代码级调试、代码库管理和性能调节等功能。这个工具集的核心就是Xcode程序,它提供了基本的源代码开发环境。

Xcode是一款强大的专业开发工具,使用它能够以我们熟悉的方式简单快速地完成执行绝大多数常见的软件开发任务。于对创建单一类型的应用程序而言,Xcode要强大得多,它的设计目的是使我们可以创建任意类型的软件产品。从Cocoa及Carbon应用程序,到内核扩展及Spotlight导入器等各种开发任务,Xcode都能完成。Xcode界面可以帮助开发人员以各种不同的方式查看工具中的代码,并且可以访问工具箱中的许多功能,例如GCC、javac、jikes和GDB等,这些功能都是制作软件产品所需要的。Xcode是一个由专业人员设计、又由专业人员使用的工具。

由于能力出众,Xcode已经被Mac开发者社区广为采纳。随着苹果电脑向基于Intel的Macintosh迁移,转向Xcode变得比以往任何时候都更加重要。这是因为使用Xcode可以创建通用的二进制代码,这里所说的通用二进制代码是一种可以把PowerPC和Intel架构下的本地代码同时放到一个程序包的执行文件格式。事实上,对于还没有采用Xcode的开发人员来说,转向Xcode是将应用程序连编为通用二进制代码的第一个必要的步骤。

Xcode的官方地址是https://developer.apple.com/xcode/downloads/,其界面如图1-1所示。

图1-1 Xcode的官方网站的界面

在界面的下方介绍了Xcode 7的新功能,如图1-2所示。

图1-2 Xcode 7的新功能

截止到2015年8月,市面中的最主流版本是Xcode 6,最新版本是Xcode 7 beta。

其实对于初学者来说,只需要安装Xcode即可。使用Xcode既能开发iPhone程序,也能开发iPad程序。并且Xcode还是完全免费的,通过它提供的模拟器就可以在计算机上测试iOS程序。如果要发布iOS程序或在真实机器上测试iOS程序,就需要花99美元了。

(1)苹果开发主页面https://developer.apple.com/,先在官网上注册成为一名开发人员。

(2)登录到Xcode的下载页面https://developer.apple.com/xcode/downloads/,找到Xcode 7选项,如图1-3所示。

图1-3 Xcode的下载页面

(3)如果是付费账户,可以直接在苹果官方网站中下载获得。如果不是付费用户,可以从网络中搜索热心网友的共享信息,以此达到下载Xcode的目的。单击“Download Xcode 7 beta”链接后弹出下载对话框,如图1-4所示。单击“下载”按钮开始下载。

图1-4 下载对话框

安装Xcode 7的具体过程如下。

(1)下载完成后单击打开下载的“.dmg”格式文件,然后双击“Xcode”文件开始安装,如图1-5所示。

图1-5 打开下载的Xcode文件

(2)双击Xcode下载到的文件开始安装,在弹出的警告对话框中单击“Continue”按钮,如图1-6所示。

图1-6 警告对话框

(3)在弹出的是否同意注册界面中单击“Agree”按钮,如图1-7所示。

图1-7 是否同意注册对话框

(4)在弹出的组件安装对话框中单击“Install”按钮,如图1-8所示。

图1-8 组件安装对话框

(5)在弹出的对话框中输入用户名和密码,然后单击“好”按钮,如图1-9所示。

图1-9 输入用户名和密码

(6)在弹出的新对话框中显示安装进度,安装完成后的界面如图1-10所示。

图1-10 完成安装界面

(7)启动Xcode 7后的初始界面如图1-11所示。

图1-11 启动Xcode 7后的初始界面

注意

 

考虑到很多初学者是学生,如果没有购买苹果机的预算,可以在Windows系统上采用虚拟机的方式安装OS X系统。

无论读者是已经有一定Xcode经验的开发者,还是刚刚开始迁移的新用户,都需要对Xcode的用户界面及如何用Xcode组织软件工具有一些理解,这样才能真正高效地使用这个工具。这样可以大大加深您对隐藏在Xcode背后哲学的认识,并帮助您更好地使用Xcode。

建议读者将Xcode安装在OS X的Mac机器上,也就是装有苹果系统的苹果机上。通常来说,在苹果机器的OS X系统中已经内置了Xcode,默认目录是“/Developer/Applications”。

在Xcode中创建iOS 9项目并启动模拟器的步骤如下。

(1)Xcode位于“Developer”文件夹内中的“Applications”子文件夹中,快捷图标如图1-12所示。

图1-12 Xcode图标

(2)启动Xcode 7之后的初始界面如图1-13所示,可以在此选择创建新工程还是打开一个已存在的工程。

图1-13 选择创建新工程还是打开已有工程

(3)单击“Create a new Xcode project”后会出现“Choose a template…”窗口,如图1-14所示。在窗口的左侧,显示了可供选择的模板类别,因为我们的重点是类别iOS Application,所以在此需要确保选择了它。而在右侧显示了当前类别中的模板以及当前选定模板的描述。

图1-14 “Choose a template…”窗口

(4)从iOS 9开始,在“Choose a template…”窗口的左侧新增了“watchOS”选项,这是为开发苹果手表应用程序所准备的。选择“watchOS”选项后的效果如图1-15所示。

图1-15 选择“watchOS”选项后的效果

(5)对于大多是iOS 9应用程序来说,可以选择“iOS”下的“Single View Application”模板,然后单击“Next(下一步)”按钮即可,如图1-16所示。

图1-16 选择Single View Application模板

(6)选择模板并单击“Next”按钮后,在新界面中Xcode将要求您指定产品名称和公司标识符。产品名称就是应用程序的名称,而公司标识符是创建应用程序的组织或个人的域名,但按相反的顺序排列。这两者组成了标识符,它将您的应用程序与其他iOS应用程序区分开来,如图1-17所示。

图1-17 指定产品名称和公司标识符

例如,我们将创建一个名为“exSwift”的应用程序,设置域名是“apple”。如果没有域名,在开发时可以使用默认的标识符。

(7)单击“Next”按钮,Xcode将要求指定项目的存储位置。切换到硬盘中合适的文件夹,确保没有勾选复选框Source Control,再单击“Create(创建)”按钮。Xcode将创建一个名称与项目名相同的文件夹,并将所有相关联的模板文件都放到该文件夹中,如图1-18所示。

图1-18 选择项目文件夹

(8)在Xcode中创建或打开项目后,将出现一个类似于iTunes的窗口,您将使用它来完成所有的工作,从编写代码到设计应用程序界面。如果这是您第一次接触Xcode,令人眼花缭乱的按钮、下拉列表和图标将让您感到不适,如图1-19所示。

图1-19 Xcode界面

(9)运行iOS模拟器的方法十分简单,只需单击左上角的按钮即可,运行效果如图1-20所示。

图1-20 iPhone模拟器的运行效果

在开发过程中,经常需要打开一个现有的iOS 9项目,例如打开本书所附光盘中的工程。

(1)启动Xcode 7开发工具,然后单击右下角的“Open another project…”命令,如图1-21所示。

图1-21 “Open another project…”命令

(2)此时会弹出选择目录对话框界面,在此找到要打开项目的目录,然后单击“.xcodeproj”格式的文件即可打开这个iOS 9项目,如图1-22所示。

图1-22 单击“.xcodeproj”格式的文件打开项目

另外,读者可以直接找到要打开工程的目录位置,双击里面的“.xcodeproj”格式的文件也可以打开这个iOS 9项目。

知识点讲解:光盘:视频\知识点\第1章\第一段Objective-C程序.mp4

实例1-1 第一段Objective-C程序
源码路径 光盘:\daima\第1章\1-1

首先举一个十分简单的例子,编写一段Objective-C程序,这段简单程序能够在屏幕上显示短语“first Programming!”。整个代码十分简单,下面是完成上述任务的Objective-C程序。

//  main.m
//  first
//  Created by 管 on 15/7/27.
//  Copyright (c) 2015年 apple. All rights reserved.
#import <Foundation/Foundation.h>
// 定义main方法,作为程序入口
int main(int argc, char *argv[])
{
    @autoreleasepool
    {
        NSLog(@"Hello Objective-C");  // 执行输出
    }
    return 0;  // 返回结果
}

对于上述程序,我们可以使用Xcode编译并运行,或者使用GNU Objective-C编译器在Terminal窗口中编译并运行程序。Objective-C程序最常用的扩展名是“.m”,将上述程序保存为“main.m”,然后可以使用Xcode打开。

注意

 

在Objective-C中,小写字母和大写字母是有区别的。Objective-C并不关心程序行从何处开始输入,可以在程序行的任何位置输入语句。基于此,我们可以开发容易阅读的程序。

Xcode是一款功能全面的应用程序,通过此工具可以轻松输入、编译、调试并执行Objective-C程序。如果想在Mac上快速开发Objective-C应用程序,则必须学会使用这个强大工具的方法。前面已经介绍了安装并搭建Xcode工具的流程,接下来将简单介绍使用Xcode编辑Objective-C代码的基本方法。

(1)Xcode位于“Developer”文件夹内中的“Applications”子文件夹中,快捷方式的图标如图1-23所示。

图1-23 Xcode图标

(2)启动Xcode后的效果如图1-24所示,单击“Create a new Xcode project”选项。

图1-24 启动一个新项目

(3)出现如图1-25所示的选择模板窗口。在窗口的左侧,显示了可供选择的模板类别。因为是在电脑中调试,所以选择左侧“OS X”下的“Application”菜单,然后在右侧单击模板“Command Line Tool”,再单击“Next”按钮。

图1-25 选择应用程序模板

(4)在新界面中Xcode将要求您指定产品名称和公司标识符。产品名称就是应用程序的名称,而公司标识符创建应用程序的组织或个人的域名,但按相反的顺序排列。这两者组成了束标识符,它将您的应用程序与其他iOS应用程序区分开来,如图1-26所示。

图1-26 产品名称和公司标识符

(5)单击Next按钮,Xcode将要求我们指定项目的存储位置。切换到硬盘中合适的文件夹,确保没有选择复选框Source Control,再单击“Create(创建)”按钮。Xcode将创建一个名称与项目名相同的文件夹,并将所有相关联的模板文件都放到该文件夹中,如图1-27所示。

图1-27 设置当前工程文件的保存路径

(6)在Xcode中创建新项目后,将出现一个类似于iTunes的窗口,如图1-28所示。

图1-28 Xcode界面

(7)复制前面的代码到main.m文件,保存在本地机器后,文件main.m在Xcode中的编辑界面如图1-29所示。Xcode使用不同的颜色指示值、保留字等内容。

图1-29 Xcode工程中文件main.m的代码

下面可以编译并运行第一个程序了,但是首先需要保存程序,方法是从File菜单中选择Save。如果在未保存文件的情况下尝试编译并运行程序,Xcode会询问您是否需要保存。在Build菜单下,可以选择Build或Build and Run。我们选择后者,如果构建时不出现任何错误,则会自动运行此程序。Xcode工具栏中的调试菜单如图1-30所示。

图1-30 Xcode工具栏中的调试菜单

运行iOS模拟器的方法十分简单,只需单击左上角的按钮即可。如果程序中有错误,在此步骤期间会看到列出的错误消息。此时,可回到程序中解决错误,然后再次重复此过程。解决程序中的所有问题之后,会出现一个新窗口,其中显示prog1 – Debugger Console。如果该窗口没有自动出现,进入主菜单栏并从Run菜单中选择Console即可。执行结果如图1-31所示。

图1-31 执行结果

注意——Xcode支持的文件类型

 

Objective-C源文件使用“.m”作为文件名的扩展名,Xcode可以编译的文件扩展名如下所示。

.c:C语言源文件、.cc或.cpp:C++语言源文件、.h:头文件、.m:Objective-C源文件、.mm:Objective-C++源文件、.pl:Perl源文件、.o:已经编译的文件。

接下来开始分析文件first.m,程序的前4行如下:

//  main.m
//  first
//  Created by 管 on 15/7/27.
//  Copyright (c) 2015年 apple. All rights reserved.

这4段代码为注释,在程序中使用的注释语句用于对程序进行说明,可增强程序的可读性。注释负责告诉该程序的读者,不管是程序员还是其他负责维护该程序的人,这只是程序员在编写特定程序和特定语句序列时的想法。一般首行注释用来描述整个程序的功能。

在Objective-C程序中,有如下两种插入注释的方式:

当注释需要跨越很多程序行时,通常使用第二种注释格式,例如下面的代码。

/*
这是注释,因为很长很长很长很长很长很长的,
所以得换行,
功能是显示一行文本。
如果不明白可以联系作者:
xxxx@yahoo.com
*/

注意——注释的好处

 

在编写程序或者将其输入到计算机上时,应该养成在程序中插入注释的习惯。使用注释有如下两个好处。

(1)当特殊的程序逻辑在您的大脑中出现时就说明程序,要比程序完成后再回来重新思考这个逻辑简单得多。

(2)如果在工作的早期阶段把注释插入程序中,在调试阶段隔离和调试程序逻辑错误时会受益匪浅。注释不仅可以帮助您(或者其他人)通读程序,而且还有助于指出逻辑错误的根源。

我们继续分析程序,看接下来的代码。

#import <Foundation/Foundation.h>

这个#import指令的功能是告诉编译器找到并处理名为Foundation.h的文件,这是一个系统文件,表示这个文件不是我们创建的。#import表示将该文件的信息导入或包含到程序中,这个功能像把此文件的内容导入到程序中。例如上述代码可以导入文件Foundation.h。

在Objective-C语言中,编译器指令以@符号开始,这个符号经常用在使用类和对象的情况。在表1-2中,对Objective-C语言中的指令进行了总结。

表1-2 编译器指令

指  令

含  义

例  子

@”characters

实现常量NSSTRING字符串对象(相邻的字符串已连接)

NSString *url = @”
http://www.kochan-wood.com”;

@class c1, c2,...

c1c2等声明为类

@class Point, Rectangle;

@defs (class)

class返回一个结构变量的列表

struct Fract
{ @defs(Fraction); }
*fractPtr;
fractPtr = (struct Fract *)
[[Fraction alloc] init];

@dynamic names

用于names的存取器方法,可动态提供

@dynamic drawRect;

@encode (type)

将字符串编码为type类型

@encode (int *)

@end

结束接口部分、实现部分或协议部分

@end

@implementation

开始一个实现部分

@implementation Fraction;

@interface

开始一个接口部分

@interface Fraction:
Object <Copying>

@private

定义一个或多个实例变量的作用域

例如定义实例变量

@protected

定义一个或多个实例变量的作用域

@public

定义一个或多个实例变量的作用域

@property (list) names

为names声明list中的属性

property (retain, nonatomic)
NSSTRING *name;

@protocol (protocol)

为指定protocol创建一个Protocol对象

@protocol (Copying)]){...} if
([myObj conformsTo: (protocol)

@protocol name

开始name的协议定义

@protocol Copying

@selector (method)

指定method的SEL(选择)对象

if ([myObj respondsTo:
@selector (allocF)]) {...}

@synchronized (object)

通过单线程开始一个块的执行。Object是一个互斥(mutex)的标志

@synthesize names

为names生成存取器方法,如果未提供的话

@synthesize name, email;参见“实例变量”

@try

开始执行一个块,以捕捉异常

例如“异常处理”应用

@catch (exception)

开始执行一个块,以处理exception

@finally

开始执行一个块,不管上面的@try块是否抛出异常都会执行

@throw

抛出一个异常

 

C语句由一个分号结束。空白字符(空格、制表符和换行符)是分隔名称和关键字时所必需的。C忽略任何额外的空白:缩进和任何额外的空白对于编译的可执行代码都没有影响;可以自由地使用它们,使代码更具可读性。一条语句可以扩展到多行,例如,如下的3种形式是等价的。

接下来看如下剩余的代码:

int main(int argc, char *argv[])
{
    @autoreleasepool
    {
       NSLog(@"Hello Objective-C");  // 执行输出
    }
    return 0;  // 返回结果
}
distance = rate*time;  
   distance = rate * time;  
distance =  
rate *  
   time;

上述代码都被包含在函数main()中,此函数和C语言中的同名函数类似,是整个程序的入口函数。上述代码功能是指定程序的名称为main,这是一个特殊的名称,功能是准确地表示程序将要在何处开始执行。在main前面的保留关键字int用于指定main返回值的类型,此处用int表示该值为整型(在本书后面的章节中将更加详细地讨论类型问题)。

在上述main代码块中包含了多条语句。我们可以把程序的所有语句放入到一对花括号中,最简单的情形是:一条语句是一个以分号结束的表达式。系统将把位于花括号中的所有语句看作main程序的组成部分。首先看如下第一条语句:

@autoreleasepool

上述语句为自动释放池在内存中保留了空间(在本书后面的“内存管理”章节会讨论这方面的内容)。作为模板的一部分,Xcode会将这行内容自动放入程序中。

接下来的一条语句用于指定要调用名为NSLog的例程,传递或传送给NSLog例程的参数或实参是如下字符串。

@ "first Programming!"

此处的符号@位于一对双引号括起来的字符串前面,这被称为常量NSString对象。NSString例程是Objective-C库中的一个函数,它只能显示或记录其参数。但是之前它会显示该例程的执行日期和时间、程序名以及其他数值。在本书的后面的内容中,不会列出NSLog在输出前面插入的这些文本。

在Objective-C中,所有的程序语句必须使用分号“;”结束,这也是为什么分号在NSLog调用的结束圆括号之后立即出现的原因。

在函数main中的最后一条语句是:

return 0;

上述语句的功能是终止main的执行,并且返回状态值0。在Objective-C中规定,0表示程序正常结束。任何非零值通常表示程序出现了一些问题,例如无法找到程序所需要的文件。

如果使用Xcode进行调试,会在Debug Console窗口中发现在NSLog输出的行后显示下面的提示。

The Debugger has exited with status 0.

假如修改实例1-1中的程序,使其能够同时显示文本“Objective-C OK”。要想实现这个功能,可以通过添加另一个对NSLog例程的调用的方法来实现,例如使用下面的代码实现。

#import <Foundation/Foundation.h>
// 定义main方法,作为程序入口
int main(int argc, char *argv[])
{
    @autoreleasepool
    {
       NSLog(@"Hello Objective-C");  // 执行输出
       NSLog (@"Objective-C OK!");
    }
    return 0;  // 返回结果
}

在编写上述代码时,必须使用分号结束每个Objective-C程序语句。执行后输出结果为:

Hello Objective-C
Objective-C OK!

而在下面的实例代码中可以看到,无须为每行输出单独调用NSLog例程。

实例1-2 使用一个NSLog输出多行信息
源码路径 光盘:\daima\第1章\1-2
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog (@"look...\n..1\n...2\n....3");
    }
    return 0;
}

在上述代码中,“\n”中的反斜杠和字母是一个整体,合起来表示换行符。换行符的功能是通知系统要转到一个新行的工作。任何要在换行符之后输出的字符将出现在显示器的下一行。其实换行符类似于HTML标记中的换行标记<br>。执行上述代码后输出结果如下。

look...
..1
...2
....3

注意——格式化

知识点讲解:光盘:视频\知识点\第1章\Xcode集成开发环境介绍.mp4

Xcode是一款功能全面的应用程序,通过此工具可以轻松输入、编译、调试并执行Objective-C程序。如果想在Mac上快速开发iOS应用程序,则必须学会使用这个强大工具的方法。本章将详细讲解Xcode 7开发工具的基本知识,为读者步入后面的学习打下基础。

使用Xcode 7打开一个iOS 9项目后的效果如图1-32所示。

图1-32 打开一个iOS 9项目后的效果

图1-32中各部分介绍如下。

(1)调试区域:左上角的这部分是控制程序进行调试或者终止调试,还有选择Scheme目标的地方。单击三角形图标会启动模拟器运行这个iOS程序,单击正方形图标会停止运行。

(2)资源管理器:左边这一部分是资源管理器,上方可以设置选择显示的视图,有Class视图、搜索视图、错误视图等。

(3)工程面板:这部分是最重要的,也是整个窗口中所占面积最大的区域。通常显示当前工程的总体信息,例如编译信息、版本信息和团队信息等。当在“资源管理器”中用鼠标选择一个源码文件时,此时这个区域将变为“编码面板”,在面板中将显示这个文件的具体源码。

(4)属性面板:在进行Storyboard或者xib设计的时候十分有用,可以设置每个控件的属性。和Visual C++、Vsiual Studio.NET中的属性面板类似。

1.调试工具栏

调试工具栏界面效果如图1-33所示。调试工具栏最左边是run运行按钮,单击它可以打开模拟器来运行项目。停止运行按钮是。另外,当单击并按住片刻后可以看到下面的弹出菜单,这里提供了更多的运行选项。

图1-33 调试工具栏

在停止运行按钮的旁边,可以看到如图1-34所示的下拉列表,在这里可以选择虚拟器的属性是iPad还是iPhone。iOSDevice是指真机测试,如图1-34所示。

图1-34 选择虚拟器的属性

工具栏最右侧有3个关闭视图控制器工具,可以让我们关闭一些不需要的视图,如图1-35所示。

图1-35 关闭视图控制器工具

2.导航面板介绍

在导航区域包含了多个导航类型,例如选中第一个图标后会显示项目导航面板,即显示当前项目的构成文件,如图1-36所示。

图1-36 项目导航面板

单击第2个图标后会显示符号导航面板,将显示当前项目中包含的类、方法和属性,如图1-37所示。

图1-37 符号导航面板

单击第3个图标后会显示搜索导航面板,在此可以输入将要搜索的关键字,按回车键后将会显示搜索结果。例如,输入关键字“first”后的效果如图1-38所示。

图1-38 搜索导航面板界面

单击第4个图标后会显示问题导航面板,如果当前项目存在错误或警告,则会在此面板中显示出来,如图1-39所示。

图1-39 显示出错信息

单击第5个图标后会显示测试导航面板,其中会显示当前项目包含的测试用例和测试方法等,如图1-40所示。

图1-40 测试导航面板

单击第6个图标后会显示调试导航面板,在默认情况下将会显示一片空白,如图1-41所示。只有进行项目调试时,才会在这个面板中显示内容。

图1-41 调试导航面板

在Xcode 7中使用断点调试的基本流程如下。

打开某一个文件,在编码窗口中找到想要添加断点的行号,然后单击鼠标左键,此时这行代码前面将会出现图标,如图1-42所示。如果想删除断点,只需用鼠标左键按住断点并拖向旁边,此时断点会消失。

图1-42 设置的断点

在添加断点并运行项目后,程序会进入调试状态,并且会执行到断点处停下来,此面板中将会显示执行到这个断点时的所有变量及变量的值,如图1-43所示。此时的测试导航面板如图1-44所示。

图1-43 变量及变量的值

图1-44 断点测试导航面板

断点测试导航面板的功能非常强大,甚至可以查看程序对CPU的使用情况,如图1-45所示。

图1-45 CPU的使用情况

单击第7个图标后会显示断点导航面板,在此界面中将会显示当前项目中的所有断点。右键单击断点后,可以在弹出的命令中设置禁用断点或删除断点,如图1-46所示。

图1-46 禁用断点或删除断点

单击第8个图标后会显示日志导航面板,在此面板中将会显示在开发整个项目的过程中产生的所有信息,如图1-47所示。

图1-47 日志导航面板

3.文件检查器面板

单击属性窗口中图标后会显示文件检查器面板,此面板用于显示该文件存储的相关信息,例如文件名、文件类型、文件存储路径和文件编码等信息,如图1-48所示。

图1-48 文件检查器面板

单击属性窗口中的图标后会显示快速帮助面板,当将鼠标停留在某个源码文件中的声明代码片段部分时,快速帮助面板中会显示帮助信息。图1-49的右上方显示了鼠标所在位置的帮助信息。

图1-49 快速帮助信息

我们已经了解了Xcode 7中相关的基本面板。下面将详细讲解在Xcode 7中进行基本操作的知识。

1.改变公司名称

通过Xcode编写代码,代码的头部如图1-50所示。

图1-50 头部内容

可以将这部分内容改为公司的名称或者项目的名称。

2.通过搜索框缩小文件范围

当项目开发到一段时间后,源代码文件会越来越大。再从Groups & Files界面选择相关代码,效率较差。可以借助Xcode的浏览器窗口查找相关代码,如图1-51所示。

图1-51 Xcode的浏览器窗口

在图1-51的搜索框中可以输入关键字,这样浏览器窗口中会显示带关键字的相关代码行。比如想看带SkTexture的代码行,结果如图1-52所示。

图1-52 按关键字搜索代码行

3.格式化代码

在图1-53所示的界面中,有很多行都顶格了,此时需要将代码进行格式化处理。

图1-53 多行都顶格

选中需要格式化的代码,然后在右键快捷菜单中选择Structure→Re-Indent命令,如图1-54所示。

图1-54 使用快捷菜单格式化代码

4.代码缩进和自动完成代码

有的时候代码需要缩进,有的时候又要做相反的操作。单行缩进和其他编辑器类似,只需使用tab键即可。如果选中多行则需要使用快捷键了,其中command+]表示缩进,command+[表示反向移动。

使用IDE工具的一大好处是,工具能够帮助我们自动完成某些代码,比如冗长的类型名称。Xcode提供了这方面的功能。比如下面的输出日志:

NSLog(@"book author: %@",book.author);

如果都自己输入会很麻烦的,可以先输入ns,然后使用快捷键ctrl+.,会自动出现如下代码:

NSLog(NSString * format)

在其中填写参数即可。快捷键“ctrl+.”的功能是自动给出第一个匹配ns关键字的函数或类型,而NSLog是第一个。如果继续使用“ctrl+.”,则会出现比如NSString的形式。依此类推,会显示所有ns开头的类型或函数,并循环往复。如果用“ctrl+,”快捷键,那么会显示全部ns开头的类型、函数、常量等的列表,可以在这里选择。其实,Xcode也可以在输入代码的过程中自动给出建议。比如,要输入NSString。当输入到NSStr的时候,后面的ing会自动出现,如果正是所需要的,直接按tab键确认即可。也许你想输入的是NSStream,那么可以继续输入。另外也可输入ESC键,这时就会出现结果列表供选择了,如图1-55所示。

图1-55 结果列表

如果正在输入方法,那么会自动完成,如图1-56所示。

图1-56 自动完成的结果

可以使用tab键确认方法中的内容,或者通过快捷键“ctrl+/”在方法中的参数之间来回切换。

5.文件内查找和替换

在编辑代码的过程中经常会进行查找和替换操作,如果只是查找则直接按“command+f”即可,在代码的右上角会出现如图1-57所示的对话框。只需在里面输入关键字,不论大小写,代码中所有命中的文字都高亮显示。

图1-57 查找界面

也可以实现更复杂的查找,比如是否大小写敏感,是否使用正则表达式等。设置界面如图1-58所示。

图1-58 复杂查找设置

通过图1-59中所示的“Find & Replace”命令可以切换到替换界面。

图1-59“Find & Replace”替换命令

如图1-60所示,其中将查找设置为大小写敏感,然后将book替代为myBook。

图1-60 将book替代为myBook

另外,也可以单击按钮选择是全部替换,还是查找一个替换一个。如果需要在整个项目内查找和替换,则依次单击“Find”→“Find in Project…”命令,如图1-61所示。

图1-61 “Find in Project…”命令

还是以查找关键字book为例,实现界面如图1-62所示。

图1-62 在整个项目内查找“book”关键字

替换操作的过程也与之类似,在此不再进行详细讲解。

6.快速定位到代码行

如果想将光标定位到文件的某行上,可以使用快捷键“Command+L”来实现,也可以依次单击“Navigate”→“Jump to Line…”命令实现,如图1-63所示。

图1-63 “Go to Line”命令

在使用菜单或者快捷键时都会出现一个对话框,输入行号和回车后就会来到该文件的指定行,如图1-64所示。

图1-64 输入行号

7.快速打开文件

有时候需要快速打开头文件,例如图1-65所示的界面中,要想知道这里的文件Cocoa.h到底是什么内容,可以先用鼠标选中文件Cocoa.h。

图1-65 一个头文件

依次单击“File->Open Quickly…”命令,如图1-66所示。

图1-66 “Open Quickly…”命令

此时会弹出图1-67所示的Open Quickly对话框。

图1-67 Open Quickly对话框

此时双击文件Cocoa.h的条目就可以看到如图1-68所示的文件内容。

图1-68 文件Cocoa.h的内容

8.使用书签

使用Eclipse的用户会经常用到TODO标签,比如正在编写代码的时候需要做其他事情,或者提醒自己以后再实现的功能时,可以写一个TODO注释,这样可以在Eclipse的视图中找到,方便以后找到这个代码并修改。其实Xcode也有类似的功能,比如存在一段图1-69所示的代码。

图1-69 一段代码

这段代码的方法printInfomation是空的,暂时不需要具体实现。但是需要记下来,便于以后能找到并补充。那么让光标在方法内部,然后单击鼠标右键,选择Add to Bookmarks命令,如图1-70所示。

图1-70 选择Add to Bookmarks命令

此时会弹出对话框,可以在里面填写标签的内容,如图1-71所示。

图1-71 填写标签的内容

这样就可以在项目的书签节点找到这个条目了,如图1-72所示。此时单击该条目,可以回到刚才添加书签时光标的位置。

图1-72 在项目的书签节点找到添加的条目

9.自定义导航条

在代码窗口上边有一个工具条,此工具条提供了很多方便的导航功能,如图1-73所示。

图1-73 一个导航条

也可以用它来实现上面TODO的功能。这里有两种自定义导航条的写法,下面是标准写法。

#pragma mark

而下面是Xcode兼容的格式。

    // TODO: xxx
    // FIXME: xxx

完整的代码如图1-74所示。

图1-74 完整的代码

此时会产生如图1-75所示的导航条效果。

图1-75 导航条效果

10.使用Xcode帮助

如果想快速地查看官方API文档,可以在源代码中按下“Option”键并用鼠标双击该类型(函数、变量等),如图1-76所示的是SKTextureFilteringMode的API文档对话框。

图1-76 SKTextureFilteringMode的API文档对话框

如果单击图1-76中标识的按钮,会弹出完整的文档,如图1-77所示。

图1-77 完整的文档

11.调试代码

最简单的调试方法是通过NSLog打印出程序运行中的结果,然后根据这些结果判断程序运行的流程和结果值是否符合预期。对于简单的项目,通常使用这种方式就足够了。但是,如果开发的是商业项目,需要借助Xcode提供的专门调试工具。所有的编程工具的调试思路都是一样的。首先要在代码中设置断点。程序的执行是顺序的,可能怀疑某个地方的代码出了问题(引发Bug),那么就在这段代码开始的地方,比如某个方法的第一行或者循环的开始部分,设置一个断点。那么程序在调试时会在运行到断点时中止,接下来可以一行一行地执行代码,判断执行顺序是否是自己预期的,或者变量的值是否和自己想的一样。

设置断点的方法非常简单,例如在图1-78中想对方框表示的行设置断点,就单击该行左侧圆圈的位置。

图1-78 单击某行左侧圆圈位置设置断点

单击后会出现断点标志,如图1-79所示。

图1-79 断点标志

接着运行代码,比如使用“Command+Enter”命令,这时将运行到断点处停止,如图1-80所示。

图1-80 停止在断点处

可以通过“Shift+Command+Y”命令显示调试对话框,如图1-81所示。

图1-81 调试对话框

调试对话框和其他语言IDE工具的界面大同小异,因为都具有类似的功能。下面是主要命令的具体说明。

通过调试工具,可以对应用做全面和细致的调试。

在Mac中使用Xcode 7进行iOS开发时,难免需要查询很多API、类和函数的具体情况,此时可以利用Xcode自带的帮助文档系统。使用Xcode 7帮助系统的方式有如下3种。

1.使用“快速帮助面板”

在本章前面已经介绍了使用“快速帮助面板”的方法,只需将鼠标放在源码中的某个类或函数上,即可在“快速帮助面板”中弹出相关帮助信息,如图1-82所示。

图1-82 “快速帮助面板”界面

此时单击右下角中的“ViewController Catalog for iOSView Controller”后,会在新界面中显示详细信息,如图1-83所示。

图1-83 详细帮助信息

2.使用搜索功能

在图1-83所示的帮助系统中,我们可以在顶部文本框中输入一个关键字,即可在下方展示对应的知识点信息。例如输入关键字“NSString”后的效果如图1-84所示。

图1-84 输入关键字“NSString”后的帮助信息

3.使用编辑区的快速帮助

在某个程序文件的代码编辑界面,按下Option键后,当将鼠标移动到某个类上时光标会变为问号,此时单击鼠标就会弹出悬浮样式的快速帮助信息,显示对应的接口文件和参考文档。当单击文档名时,会弹出帮助界面显示详细的帮助信息,如图1-85所示。

图1-85 详细帮助信息


相关图书

Rust游戏开发实战
Rust游戏开发实战
JUnit实战(第3版)
JUnit实战(第3版)
Kafka实战
Kafka实战
Rust实战
Rust实战
PyQt编程快速上手
PyQt编程快速上手
Elasticsearch数据搜索与分析实战
Elasticsearch数据搜索与分析实战

相关文章

相关课程