编辑推荐
解读Objective-C和Cocoa特性.全面涵盖新技术和新增工具.iPhone、iPad、Mac开发必备.Objective-C是一门面向对象、通用、高级、强大的编程语言。它有着优雅的编程环境,并发扬了C语言的优秀特性,是苹果的iOS和OSX操作系统的主要编程语言。全面系统地讲述了Objective-C的基础知识和面向对象编程的重要概念,结合实例介绍了Cocoa工具包的优秀特性及框架,以及继承、复合、对象初始化、类别、协议、内存管理和源文件组织等重要编程技术,教你如何针对iOS或OSX用户界面编写出优秀的应用程序。另外,《Objective-C基础教程 第2版》第2版新增内容有:
1.Objecitve-C新特性:代码块、ARC、类扩展;
2.新增工具Clang静态分析器GCD;
3.如何使用UIKit框架开发精致的iOS应用程序;
4.如何使用新版本的Xcode。无论你是初次接触Objective-C和Cocoa,还是已有丰富的C语言、C++或者Java编程经验,《Objective-C基础教程 第2版》都能让你轻松过渡并熟练掌握Objective-C!
内容简介
Objective-C是扩展C的面向对象编程语言,也是iPhone开发用到的主要语言。《Objective-C基础教程(第2版)》结合理论知识与示例程序,全面而系统地介绍了Objective-C编程的相关内容,包括Objective-C在C的基础上引入的特性、Cocoa工具包的功能及框架,以及继承、复合、源文件组织等众多重要的面向对象编程技术。附录中还介绍了如何从其他语言过渡到Objective-C。
《图灵程序设计丛书·移动开发系列:Objective-C基础教程(第2版)》适合各类开发人员阅读。作者简介
ScottKnaster,Mac开发界传奇人物,曾就职于苹果公司,帮助开发人员编写早期平台的Mac软件。目前在谷歌工作,负责维护GoogleMacBlog。著有多部程序员必读的经典著作,如HowtoWriteMacintoshSoftware、HackingMacOSXTiger和MacintoshProgrammingSecrets。
WaqarMalik,UNIX迷,Macintosh控。早期曾就职于苹果公司,帮助开发Cocoa和Unix。目前创立了技术咨询公司CrimsonResearch,从事Cocoa应用开发工作。
MarkDalrymple,Mac和Unix程序员,有20多年开发经验,曾开发过跨平台工具包、因特网发布工具、高性能Web服务器和终端用户桌面应用。另外,他还与人合著过CoreMacOSXandUnixProgramming和AdvancedMacOSXProgramming。目录
第1章启程
1.1预备知识
1.2历史
1.3内容简介
1.4准备工作
1.5小结
第2章对C的扩展
2.1最简单的Objective-C程序
2.2解构HelloObjective-C程序
2.2.1#import语句
2.2.2框架
2.2.3NSLog和@“字符串”
2.3布尔类型
2.4小结
第3章面向对象编程的基础知识
3.1间接
3.1.1变量与间接
3.1.2使用文件名的间接
3.2在面向对象编程中使用间接
3.2.1过程式编程
3.2.2实现面向对象编程
3.3有关术语
3.4Objective-C语言中的OOP
3.4.1@interface部分
3.4.2@implementation部分
3.4.3实例化对象
3.4.4扩展Shapes-Object程序
3.5小结
第4章继承
4.1为何使用继承
4.2继承的语法格式
4.3继承的工作机制
4.3.1方法调度
4.3.2实例变量
4.4重写方法
4.5小结
第5章复合
5.1什么是复合
5.2自定义NSLog
5.3存取方法
5.3.1设置engine属性的存取方法
5.3.2设置tires属性的存取方法
5.3.3Car类代码的其他变化
5.4扩展CarParts程序
5.5复合还是继承
5.6小结
第6章源文件组织
6.1拆分接口和实现
6.2拆分Car程序
6.3使用跨文件依赖关系
6.3.1重新编译须知
6.3.2让汽车跑一会儿
6.3.3导入和继承
6.4小结
第7章深入了解Xcode
7.1窗口布局一览
7.2改变公司名称
7.3使用编辑器的技巧
7.4在Xcode的帮助下编写代码
7.4.1首行缩进(美观排版)
7.4.2代码自动完成
7.4.3括号配对
7.4.4批量编辑
7.4.5代码导航
7.4.6集中精力
7.4.7使用导航条
7.4.8获取信息
7.5调试
7.5.1暴力测试
7.5.2Xcode的调试器
7.5.3精巧的调试符号
7.5.4开始调试
7.5.5检查程序
7.6备忘表
7.7小结
第8章FoundationKit介绍
8.1稳固的Foundation
8.2使用项目样本代码
8.3一些有用的数据类型
8.3.1范围
8.3.2几何数据类型
8.4字符串
8.4.1创建字符串
8.4.2类方法
8.4.3关于大小
8.4.4字符串比较
8.4.5不区分大小写的比较
8.4.6字符串内是否还包含别的字符串
8.4.7可变性
8.5集合大家族
8.5.1NSArray
8.5.2可变数组
8.5.3枚举
8.5.4快速枚举
8.5.5NSDictionary
8.5.6请不要乱来
8.6其他数值
8.6.1NSNumber
8.6.2NSValue
8.6.3NSNull
8.7示例:查找文件
8.8小结
第9章内存管理
9.1对象生命周期
9.1.1引用计数
9.1.2对象所有权
9.1.3访问方法中的保留和释放
9.1.4自动释放
9.1.5所有对象放入池中
9.1.6自动释放池的销毁时间
9.1.7自动释放池的工作流程
9.2Cocoa的内存管理规则
9.2.1临时对象
9.2.2拥有对象
9.2.3垃圾回收
9.2.4自动引用计数
9.3异常
9.3.1与异常有关的关键字
9.3.2捕捉不同类型的异常
9.3.3抛出异常
9.3.4异常也需要内存管理
9.3.5异常和自动释放池
9.4小结
第10章对象初始化
10.1分配对象
10.1.1初始化对象
10.1.2编写初始化方法
10.1.3初始化时要做些什么
10.2便利初始化函数
10.3更多部件改进
10.3.1Tire类的初始化
10.3.2更新main函数
10.3.3清理Car类
10.4Car类的内存清理(垃圾回收方式和ARC方式)
10.5指定初始化函数
10.5.1子类化问题
10.5.2Tire类的初始化函数改进后的版本
10.5.3添加AllWeatherRadial类的初始化函数
10.6初始化函数规则
10.7小结
第11章属性
11.1使用属性值
11.1.1简化接口代码
11.1.2简化实现代码
11.1.3点表达式的妙用
11.2属性扩展
11.2.1名称的使用
11.2.2只读属性
11.2.3自己动手有时更好
11.2.4特性不是万能的
11.3小结
第12章类别
12.1创建类别
12.1.1开始创建类别
12.1.2@interface部分
12.1.3@implementation部分
12.1.4类别的缺陷
12.1.5类别的优势
12.1.6类扩展
12.2利用类别分散实现代码
12.3通过类别创建前向引用
12.4非正式协议和委托类别
12.4.1ITunesFinder项目
12.4.2委托和类别
12.4.3响应选择器
12.4.4选择器的其他应用
12.5小结
第13章协议
13.1正式协议
13.1.1声明协议
13.1.2采用协议
13.1.3实现协议
13.2复制
13.2.1复制Engine
13.2.2复制Tire
13.2.3复制Car
13.2.4协议和数据类型
13.3Objective-C2.0的新特性
13.4委托方法
13.5小结
第14章代码块和并发性
14.1代码块
14.1.1代码块和函数指针
14.1.2Objective-C变量
14.2并发性
14.2.1同步
14.2.2队列也要内存管理
14.2.3操作队列
14.3小结
第15章AppKit简介
15.1构建项目
15.2创建委托文件的@interface部分
15.3InterfaceBuilder
15.4设计用户界面
15.5创建连接
15.5.1连接输出口(IBOutlet)
15.5.2连接操作(IBAction)
15.6应用程序委托的实现
15.7小结
第16章UIKit简介
16.1视图控制器
16.2小结
第17章文件加载与保存
17.1属性列表
17.1.1NSDate
17.1.2NSData
17.1.3写入和读取属性列表
17.1.4修改对象类型
17.2编码对象
17.3小结
第18章键/值编码
18.1入门项目
18.2KVC简介
18.3键路径
18.4整体操作
18.4.1休息一下
18.4.2快速运算
18.5批处理
18.6nil仍然可用
18.7处理未定义的键
18.8小结
第19章使用静态分析器
19.1静态工作
19.1.1开始分析
19.1.2协助分析器
19.1.3了解更多
19.2小结
第20章NSPredicate
20.1创建谓词
20.2计算谓词
20.3数组过滤器
20.4格式说明符
20.5运算符
20.5.1比较和逻辑运算符
20.5.2数组运算符
20.6有SELF就足够了
20.7字符串运算符
20.8LIKE运算符
20.9结语
附录从其他语言转向Objective-C
索引
精彩书摘
不仅可以将一个类的实现代码分散到多个不同的源文件中,还可以分散到多个不同的框架中。NSString是Foundation框架中的一个类,包含了许多面向数据的类,如字符串、数字和集合。所有的视觉组件(如窗口、颜色和绘图等)都包含在AppKit和uIKit中。虽然NSString类是在Foundation框架中声明的,但是AppKit中有一个Nsstring的类别,称为NSStringDrawing,该类别允许你向字符串发送绘图消息。在绘制一个字符串时,该方法会将字符串的文本渲染到屏幕上。由于这是一种图形功能,所以它是AppKit框架中的方法。不过Nsstring又是Foundation框架的对象。cocoa的设计人员通过类别使数据功能放在Foundation框架中,而绘图功能放在AppKit框架中。作为编程人员,我们直接使用NSStrin9类即可,通常不必关心某个方法来自何处。
12.3通过类别创建前向引用
前面提到过,Cocoa没有任何真正的私有方法。如果你知道对象支持的某个方法的名称,即使该对象所在的类的接口中没有声明该方法,你也可以调用它。
不过,编译器会尽力提供帮助。如果编译器发现你调用对象的某个方法,但是却没有找到该方法的声明或定义,那么它将发出这样的错误提示:warning:'CategoryThin9·maynotrespondto—setThing4:'。通常情况下,这种错误提示是有益的,因为它将有助于你捕捉许多输入错误。
不过,如果你的某些方法的实现使用了在类的@interface部分未列出的方法,编译器的这种警惕性会带来一些问题。对于为什么不想在类的@interface部分列出自己的全部方法,有许多充分的理由。这些方法可能是纯粹的实现细节,你可能将根据方法的名称来确定要使用哪个方法。但是不管怎样,如果你在使用自己的方法之前没有声明它们,编译器就会提出警告。而修复掉所有的编译器警告是一种良好的习惯,那么该如何去做呢?
如果能够先定义一个方法然后再使用它,编译器将会找到你的方法定义,因而不会产生警告。但是,如果不方便这样做,或者你使用的是另一个类中尚未发布的方法,那么就需要采取其他措施。通过类别来救急只要在类别中声明一个方法,编译器就会表示:“好了,该方法已经存在,如果遇到编程人员使用该方法,我不会提出警告。”实际上,如果你不想实现这个方法的话,放着不管就可以了。
常用的策略是将类别置于实现文件的最前面。假设car类有一个名为rotateTires的方法。我们可以使用另一个名为moveTireFromPosition:toPosition:的方法来实现rotateTires方法,以交换两个位置的轮胎。第二个方法是实现细节,而不是将其放在car类的公共接口中。通过在类别中声明moVeTireFromPosition:toPosition:方法,rotateTires方法可以使用它,但不会引发编译器产生警告。
……