疯狂iOS 讲义(上)Objective-C 2.0与iPhone/iPad应用开发基础(国内首部iOS 7相关著作,小伙伴们,学好iPhone/iPad应用开发,我们一起做土豪吧)
李刚编
ISBN978-7-121-19107-7
2014年1月出版
定价:99.00元
684页
16开
编辑推荐
内容最详尽的iOS 7平台iPhone/iPad应用开发指引
获奖无数的疯狂讲义系列最新作品
密集的代码注释,帮你读懂代码、领悟真谛
内有“疯狂连连看”等案例的完整实现
内容提要
本书以最新的 iOS 7.0、Xcode 5 为平台,全面介绍 iOS 应用开发的基础知识。全书从Objective-C 基本语法开始,详细介绍了 Objective-C 的基本语法结构、Objective-C的面向对象特征、Foundation 框架的核心类库用法、文件 I/O 体系等知识,掌握Objective-C 语言是 iOS 引用开发的基础。之后,本书将带领读者掌握 iOS 应用开发的基本理论以及 iOS 应用的 MVC 设计和事件处理编程,重点介绍 iOS 界面编程、iOS 应用的生命周期、Quartz 2D 绘图、坐标变换、CoreImage 滤镜、Core Animation 动画等内容。最后介绍了一个《疯狂连连看》游戏实例。
本书并不局限于介绍 iOS 编程的各种理论知识,而是从“项目驱动”的角度来讲授理论,全书一共包括近百个实例,这些示范性的实例既可帮读者更好地理解各知识点在实际开发中的应用,也可供读者在实际开发时作为参考,拿来就用。
本书为所有打算深入掌握 iOS 编程的读者而编写,适合各层次的 iOS 学习者和开发者阅读,也适合作为大学教育、培训机构的 iOS 教材。但如果只是想简单涉猎 iOS 应用开发,则本书过于庞大,不适合阅读。
目录
第1章 iOS应用与开发环境1
1.1Objective-C与iOS简介2
1.1.1Objective-C简介2
1.1.2iOS简介3
1.2搭建iOS开发环境3
1.2.1下载并安装Xcode和SDK4
1.2.2安装辅助工具和文档6
1.3第一个Objective-C程序6
1.3.1使用文本编辑器开发Objective-C程序7
1.3.2使用Xcode工具开发Objective-C程序9
1.4 熟悉Xcode10
1.4.1创建iOS项目11
1.4.2熟悉导航面板12
1.4.3熟悉检查器面板14
1.4.4熟悉库面板15
1.4.5使用Xcode的帮助系统17
1.5小结20
第2章 数据类型和运算符21
2.1注释22
2.2标识符和变量23
2.2.1分隔符23
2.2.2标识符规则25
2.2.3Objective-C关键字25
2.3数据类型分类25
2.4基本数据类型26
2.4.1整型26
2.4.2NSLog输出函数及格式字符27
2.4.3字符型29
2.4.4浮点型30
2.4.5枚举型31
2.4.6BOOL类型32
2.5类型转换34
2.5.1自动类型转换34
2.5.2强制类型转化36
2.5.3表达式类型的自动提升36
2.6运算符37
2.6.1算术运算符37
2.6.2赋值运算符39
2.6.3位运算符40
2.6.4扩展后的赋值运算符42
2.6.5比较运算符42
2.6.6逻辑运算符43
2.6.7逗号运算符43
2.6.8 三目运算符44
2.6.9运算符的结合性和优先级45
2.7小结46
第3章 流程控制与数组47
3.1顺序结构48
3.2分支结构48
3.2.1if条件语句48
3.2.2switch分支语句52
3.3循环结构54
3.3.1while循环语句54
3.3.2do while循环语句56
3.3.3for循环56
3.3.4嵌套循环59
3.4控制循环结构60
3.4.1使用break结束循环61
3.4.2使用continue结束本次循环61
3.4.3使用return结束函数62
3.5goto语句62
3.6数组64
3.6.1定义数组64
3.6.2数组的初始化65
3.6.3使用数组66
3.6.4多维数组67
3.6.5多维数组的初始化68
3.6.6字符数组、字符串与结束标志73
3.6.7输出字符串和字符串函数74
3.6.8数组的应用举例76
3.7小结78
第4章 C语言特性79
4.1函数80
4.1.1定义函数80
4.1.2函数声明83
4.1.3函数的参数传递机制84
4.1.4递归函数88
4.1.5数组作为函数参数89
4.1.6内部函数与外部函数93
4.2局部变量与全局变量94
4.2.1局部变量95
4.2.2全局变量96
4.2.3外部全局变量与内部全局变量97
4.2.4动态存储与静态存储99
4.3预处理101
4.3.1使用#define、#undef执行宏定义101
4.3.2带参数的宏定义103
4.3.3使用#ifdef、#ifndef、#else、#endif执行条件编译104
4.3.4使用#if、#elif、#else、#endif执行条件编译106
4.3.5#include与#import107
4.4指针108
4.4.1指针的概念108
4.4.2指针变量及其基本用法109
4.4.3指针变量作为函数参数111
4.5指针与数组113
4.5.1指向数组的指针变量113
4.5.2指针运算114
4.5.3数组变量作为函数参数116
4.5.4指向多维数组的指针变量118
4.6字符串与指针121
4.6.1使用字符指针表示字符串121
4.6.2字符指针作为函数参数122
4.7函数与指针123
4.7.1用函数指针变量调用函数123
4.7.2用函数指针变量作为函数参数124
4.7.3返回指针的函数126
4.8指针数组和指向指针的指针127
4.8.1指针数组与main()函数形参127
4.8.2指向指针变量的指针130
4.9结构体130
4.9.1定义结构体131
4.9.2typedef语句133
4.9.3初始化结构体变量134
4.9.4结构体数组135
4.10块136
4.10.1块的基本语法136
4.10.2块与局部变量137
4.10.3直接使用块作为参数139
4.10.4使用typedef定义块变量类型139
4.11小结140
第5章 面向对象(上)141
5.1类和对象142
5.1.1定义类142
5.1.2对象的产生和使用146
5.1.3对象和指针148
5.1.4self关键字150
5.1.5id类型153
5.2方法详解154
5.2.1方法的所属性154
5.2.2形参个数可变的方法155
5.3成员变量156
5.3.1成员变量及其运行机制156
5.3.2模拟类变量158
5.3.3单例(Singleton)模式159
5.4隐藏和封装160
5.4.1理解封装161
5.4.2使用访问控制符161
5.4.3理解@package访问控制符165
5.4.4合成存取方法166
5.4.5使用点语法访问属性171
5.5键值编码(KVC)与键值监听(KVO)172
5.5.1简单的KVC172
5.5.2处理不存在的key175
5.5.3处理nil值176
5.5.4Key路径178
5.5.5键值监听(KVO)179
5.6对象初始化182
5.6.1为对象分配空间182
5.6.2初始化方法与对象初始化183
5.6.3便利的初始化方法185
5.7类的继承187
5.7.1继承的特点187
5.7.2重写父类的方法189
5.7.3super关键字190
5.8多态193
5.8.1多态性193
5.8.2指针变量的强制类型转换196
5.8.3判断指针变量的实际类型197
5.9小结198
第6章 面向对象(下)199
6.1Objective-C的包装类200
6.1.1它们不是包装类200
6.1.2NSValue和NSNumber201
6.2处理对象202
6.2.1打印对象和description方法202
6.2.2==和isEqual方法205
6.3类别与扩展209
6.3.1类别(category)210
6.3.2利用类别对类进行模块化设计212
6.3.3使用类别来调用私有方法212
6.3.4扩展(extension)214
6.4协议(protocol)与委托216
6.4.1规范、协议与接口216
6.4.2使用类别实现非正式协议217
6.4.3正式协议的定义218
6.4.4遵守(实现)协议219
6.4.5协议与委托(delegate)222
6.5使用@try处理异常225
6.5.1使用@try...@catch...@finally捕捉异常226
6.5.2访问异常信息228
6.5.3使用@finally回收资源229
6.5.4抛出异常与自定义异常类230
6.6Objective-C反射机制232
6.6.1获得Class232
6.6.2检查继承关系233
6.6.3动态调用方法235
6.7手动内存管理237
6.7.1对象的引用计数239
6.7.2对象所属权241
6.7.3方法中的保留和释放243
6.7.4使用自动释放池245
6.7.5自动释放池的销毁时机与工作过程246
6.7.6临时对象与事件循环中的自动释放池248
6.7.7手动内存管理的规则总结249
6.8自动引用计数250
6.8.1自动引用计数概述250
6.8.2@autoreleasepool块251
6.9小结251
第7章 Foundation框架详解252
7.1字符串(NSString与NSMutableString)253
7.1.1创建字符串253
7.1.2NSString的常用功能254
7.1.3可变字符串(NSMutableString)255
7.2日期与时间256
7.2.1日期与时间(NSDate)256
7.2.2日期格式器(NSDateFormatter)258
7.2.3日历(NSCalendar)与日期组件(NSDateComponents)260
7.2.4定时器(NSTimer)261
7.3对象复制263
7.3.1copy与mutableCopy方法263
7.3.2NSCopying与NSMutableCopy协议264
7.3.3浅复制与深复制266
7.3.4setter方法的复制选项268
7.4Objective-C集合概述269
7.5数组(NSArray与NSMutableArray)270
7.5.1NSArray的功能与用法270
7.5.2对集合元素整体调用方法275
7.5.3对NSArray进行排序276
7.5.4使用枚举器遍历NSArray集合元素278
7.5.5快速枚举(for…in)279
7.5.6可变数组(NSMutableArray)279
7.5.7NSArray的KVC与KVO281
7.6集合(NSSet与NSMutableSet)282
7.6.1NSSet的功能与用法282
7.6.2NSSet判断集合元素重复的标准285
7.6.3NSMutableSet的功能与用法288
7.6.4NSCountedSet的功能与用法289
7.7有序集合(NSOrderedSet与NSMutableOrderedSet)290
7.8字典(NSDictionary与NSMutableDictionary)291
7.8.1NSDictionary的功能与用法292
7.8.2对NSDictionary的key排序295
7.8.3对NSDictionary的key进行过滤297
7.8.4使用自定义类作为NSDictionary的key298
7.8.5NSMutableDictionary的功能与用法299
7.9谓词301
7.9.1定义谓词301
7.9.2使用谓词过滤集合302
7.9.3在谓词中使用占位符参数303
7.9.4谓词表达式语法305
7.9小结307
第8章 文件I/O308
8.1使用NSData与NSMutableData309
8.2使用NSFileManager管理文件和
8.2.1访问文件属性和内容311
8.2.2创建、删除、移动、复制312
8.2.3查看目录包含的内容313
8.3使用NSPathUtilities.h管理路径314
8.4使用ProcessInfo获取进程信息316
8.5使用NSFileHandle处理文件IO317
8.6使用NSURL读取网络资源319
8.7使用NSBundle处理项目相关资源320
8.8对象归档322
8.8.1使用NSKeyedArchiver归档322
8.8.2实现NSCoding协议323
8.8.3使用NSData完成自定义归档326
8.8.4使用归档实现深复制329
8.9小结330
第9章 iOS应用开发入门331
9.1从iOS项目开始332
9.1.1iOS项目包含的文件332
9.1.2Interface Builder简介333
9.1.3向nib文件添加控件336
9.1.4修改控件属性338
9.1.5UIView支持的属性339
9.1.6UILabel支持的属性340
9.2MVC342
9.2.1从程序入口开始342
9.2.2应用程序委托343
9.2.3理解iOS的MVC346
9.2.4掌握UIViewController控制器347
9.3事件机制349
9.3.1程序获取控件的两种方式349
9.3.2事件处理的方式353
9.4Storyboard的改进之处358
9.5代码控制UI界面360
9.5.1不使用界面布局文件开发UI界面360
实例:×××面布局文件开发iOS应用360
9.5.2使用代码创建UI界面362
实例:动态添加、删除标签362
9.4.3自定义UI控件364
实例:跟随手指运动的小球365
9.6美化iOS应用367
9.5.1定制iOS应用图标367
9.5.2设置iOS应用的启动画面367
9.6小结369
第10章 iOS应用的界面编程370
10.1UI控件概述371
10.1.1活动、静态和被动控件371
10.1.2UIControl基类介绍372
10.2按钮(UIButton)373
实例:丰富多彩的按钮376
10.3文本框(UITextField)377
实例:用户登录界面379
10.3.1完成输入后关闭键盘380
10.3.2触碰背景关闭键盘381
10.4多行文本控件(UITextView)382
10.4.1UIScrollView支持的属性383
10.4.2使用委托对象处理UITextView事件385
实例:导航按钮关闭虚拟键盘385
实例:自定义键盘附件关闭虚拟键盘387
10.4.3自定义选择内容后的菜单389
10.5开关按钮(UISwitch)390
实例:使用开关控制“手电筒”390
10.6分段控件(UISegmentedControl)391
实例1:通过分段控件控制背景颜色393
实例2:动态增加、删除分段394
10.7图像控件(UIImageView)395
实例1:图片浏览器396
实例2:“幻灯片”播放器398
10.8进度条399
10.8.1UIProgressView399
实例:定制进度条400
10.8.2UIActivityIndicatorView401
10.9拖动条(UISlider)403
实例:通过拖动滑块改变图片透明度404
10.10警告框(UIAlertView)与UIActionSheet405
10.10.1UIAlertView的基本用法405
10.10.2带输入框的UIAlertView407
10.10.3使用UIActionSheet409
10.11日期选择器(UIDatePicker)411
实例:倒计时器413
10.12选择器(UIPickerView)415
10.12.1单列选择器416
10.12.2多列选择器417
10.12.3相互依赖的多列选择器419
10.12.4自定义选择器视图421
实例:“×××”游戏421
10.13微调器(UIStepper)426
10.14网页控件(UIWebView)428
实例:迷你浏览器430
10.15工具条(UIToolbar)431
实例:自定义工具条控件433
10.16表格(UITableView)与表格控制器 (UITableViewController)435
10.16.1简单表格 437
10.16.2处理单元格的选中440
实例:编辑选中行441
10.16.3定制表格行446
实例1:继承UITableViewCell定制表格行446
实例2:使用动态单元格原型定制表格行449
实例3:利用xib文件定制表格行451
10.16.4编辑表格454
10.16.5多分区表格以及分区索引459
10.16.6直接使用UITableViewController461
10.16.7静态单元格464
10.16.8使用iOS 6新增的UIRefresh Controller刷新表格465
10.17搜索条(UISearchBar)467
10.17.1使用搜索条468
10.17.2使用UISearchDisplayController471
实例:下拉列表显示搜索结果471
10.18导航条(UINavigationBar)与导航 条控制器(UINavigationController)475
10.18.1使用导航条475
10.18.2使用UINavigationController477
实例:查看、编辑图书信息479
10.18.3使用segue控制过渡484
10.18.4使用segue控制导航487
10.19网格(UICollectionView)与网格控制器(UICollectionViewController)490
10.19.1UICollectionView的功能与用法492
10.19.2使用UICollectionViewDelegateFlowLayout定制布局497
实例:单元格大小不同的网格497
10.19.3扩展UICollectionViewLayout定制布局498
实例:环形布局的UICollectionView499
10.19.4多分区网格502
实例:带页眉、页脚的多分区网格502
10.19.5直接使用UICollectionViewController505
10.20标签条(UITabBar)与标签页控制器(UITabBarController)509
10.20.1使用UITabBar509
10.20.2使用UITabBarController511
10.20.3在Storyboard中使用UITabBarController514
10.21页控件(UIPageControl)与页控制器(UIPageViewController)515
10.21.1UIPageControl与UIScrollView结合使用515
10.21.2使用UIPageViewController519
10.22iPad应用开发523
10.22.1使用iPad专用控件:UISplitViewController 523
10.22.2使用UIPopoverController实现浮动窗口530
10.22.3开发同时兼容iPhone与iPad 的应用532
10.23小结535
第11章 管理iOS应用的运行537
11.1自动旋转机制538
11.1.1配置应用支持的方向538
11.1.2指定视图控制器支持的方向540
11.2旋转时重构用户界面541
11.3旋转时切换视图543
11.4iOS应用的生命周期546
11.4.1应用程序的状态547
11.4.2应用程序启动过程548
11.4.3程序入口:main函数549
11.4.4响应中断550
11.4.5进入后台552
11.4.6返回前台运行553
11.4.7应用程序终止554
11.4.8Main Run Loop554
11.5小结555
第12章 图形、图像与动画556
12.1使用UIImage和CGImage处理位图557
12.1.1显示动画557
实例:蝴蝶飞舞559
12.1.2CGImage与CGImageRef559
12.2Quartz 2D绘图560
12.2.1Quartz 2D绘图基础:CGContextRef560
12.2.2绘制几何图形563
12.2.3点线模式565
12.2.4绘制文本569
12.2.5设置阴影572
12.2.6使用路径573
实例:绘制任意多角星577
12.2.7绘制曲线578
实例:使用曲线绘制多瓣花朵579
12.2.8在内存中绘图580
实例:绘图板583
12.2.9绘制位图587
实例:扩展UIImage的功能588
12.3图形变换593
12.3.1使用坐标变换593
12.3.2坐标变换与路径结合使用594
实例:雪花飘飘594
12.3.3使用矩阵变换596
12.4控制叠加模式599
12.5处理填充604
12.5.1渐变填充605
12.5.2模式填充609
12.6使用Core Image滤镜614
12.7动画621
12.7.1Core Animation动画基础621
12.7.2使用CALayer622
12.7.3使用CATransition控制过渡动画625
12.7.4使用属性动画629
12.7.5控制移动路径634
实例:绕圈游动的小鱼634
12.8小结636
第13章 疯狂连连看637
13.1游戏简介638
13.2开发游戏界面639
13.2.1开发界面布局639
13.2.2开发游戏界面控件639
13.2.3处理方块之间的连接线644
13.3游戏的状态数据模型646
13.3.1定义数据模型646
13.3.2初始化游戏状态数据647
13.4加载界面的图片651
13.5实现游戏视图控制器653
13.6实现游戏逻辑655
13.6.1定义FKGameService的接口代码655
13.6.2实现FKGameService656
13.6.3获取触碰点的方块657
13.6.4判断两个方块是否可以相连658
13.6.5定义获取通道的工具方法659
13.6.6没有转折点的横向连接661
13.6.7没有转折点的纵向连接661
13.6.8一个转折点的连接662
13.6.9两个转折点的连接665
13.6.10找出最短距离671
13.7小结673
作者简介
李刚,从事10多年的软件行业从业经历,现任疯狂软件教育中心教学总监。
51cto专家门诊特邀嘉宾。
曾任广州电信、广东龙泉科技等公司的技术培训导师,广东技术师范学院计算机科学系的兼职副教授。
培训的学生已在华为、IBM、阿里软件、网易、电信盈科等名企就职。
国内著名高端IT技术作家,已出版疯狂体系图书均已得到广泛的市场认同,多次重印成为超级畅销书,并被多所“985”“211”院校选作教材。部分图书已被翻译成繁体中文版、授权到台湾地区。
前言
移动互联网热潮在全世界引起了巨大反响,移动互联网正在改变着传统互联网的格局,全世界的IT公司争相将业务重心向移动互联网转型,移动互联网业务也成为业内最大的利润增长点。
Apple公司的iOS系统作为与Android并驾齐驱的两大操作系统,具有非常完善的生态圈,而且用户具有良好的付费习惯,吸引了大量的专业软件和小团队,甚至包括个人用户。
Apple公司提供的AppStore作为应用程序市场,它赋予了缺乏市场运作能力的第三方开发商和草根开发者新的商业机会:开发商和草根开发者只要专注于应用的开发,而市场和销售则交给Apple公司管理。在这种模式下,即使小型团队(甚至个人开发者)也可以创造财富神话。
Apple公司在全世界IT行业是一个极富传奇色彩的公司,它一度成为全球市值最大的IT公司,Apple公司的产品对于年轻人始终具有神奇的魔力,尤其是iPhone和iPad两款广为人知的产品,更是让无数追求时尚的年轻人为之痴迷。目前Apple公司也在逐步推出iTV(基于iOS系统的智能电视)、iWatch(智能手表)等各种个人电子消费品,这些产品也吊足了时尚一族的胃口。Apple公司独特的设计、市场运作方式、商业模式和公司经营管理理念,也是众多IT公司竞相研究、模仿的对象。
本书是一本介绍iOS应用开发的实用图书,全面介绍了iOS 7.0平台上应用开发各方面的知识。与市面上介绍iOS编程的一些图书不同,本书并没有花太多篇幅介绍Apple公司、iOS的发展历史(因为这些内容到处都是),完全没有介绍App Store(因为它只是一个交易网站,与iOS开发无关,但有些图书甚至用一章内容介绍它)。
本书只用了一章来介绍如何搭建iOS开发环境和Xcode工具的用法。全书内容大致可分为两部分。
第一部分详细介绍Objective-C这门看似冷门的编程语言——实际上,Objective-C现在非常热门,Objective-C语言目前雄踞编程语言排行第3的位置(前两名是Java、C)。本书在介绍Objective-C基本语法、面向对象语法时没有过多地使用IDE工具,而是带领读者使用最基本的文本编辑器学习编程,使读者真正掌握Objective-C语法。
第二部分介绍iOS开发的基础,详细介绍iOS项目的结构、各文件的作用及其调用关系,并归纳了iOS应用的MVC设计、在代码中获取UI控件的3种方式(必须先获取UI控件,然后才可修改它来更新用户界面),以及iOS应用事件处理的3种方式,通过这种方式可以让读者快速掌握iOS编程的思路。第二部分的重点是iOS应用的UI界面开发和图形、图像处理——全书全面、系统地介绍了iOS的各种UI控件的功能、用法及其定制方法,并通过相应的实例程序给出了示范。
本书是《疯狂iOS讲义》(上卷),因此关于手势、数据库操作、多线程编程、网络通信、cocos2d、Box2D、SpriteKit等高级内容将会在下卷介绍。
需要说明的是,本书只是一本介绍iOS应用开发的图书,不是一本关于所谓“思想”的书,不要指望学习本书能提高你所谓的“iOS思想”,所以那些希望提高编程思想的读者请不要阅读本书。
本书更不是一本看完之后可以“吹嘘、炫耀”的书——因为本书并没有堆砌一堆“深奥”的新名词和“高深”的思想,本书保持了“疯狂体系”的一贯风格:操作步骤详细、编程思路清晰,语言平实。只要读者想学习iOS开发,无须担心没有Apple电脑(网络上使用普通电脑装黑苹果的文章铺天盖地),也无须担心没有iPhone(Xcode集成的模拟器在大部分场景下完全可以胜任开发)——即使读者以前没有编程基础,只要有决心和毅力,阅读本书不会有任何问题(本书从最基本的Objective-C语法开始讲起)。
认真看完本书,并把书中所有的示例都练习一遍,本书带给你的只是9个字:“看得懂、学得会、做得出”。本书最后综合运用前面介绍的UI编程、绘图等知识编写了一个《疯狂连连看》小游戏,因此认真阅读本书,掌握书中知识后,即可开发各种棋类、牌类、益智类的小游戏。
不管怎样,只要读者在阅读本书时遇到了技术问题,都可以登录“疯狂Java联盟”(http://www.crazyit.org)与广大学习者交流,笔者也会通过该平台与大家一起交流、学习。
本书还具有如下几个特点。
1.知识全面,覆盖面广
本书深入阐述了Objective-C的基本语法,包括类、对象、方法、成员变量、KVC、KVO、继承和多态等面向对象的基础知识,也包括类别(category)、扩展(extension)、协议与委托、内存管理与ARC等Objective-C的高级知识。本书详细介绍了iOS全部图形界面控件的功能和用法,事件处理机制,iOS图形、图像处理。
2.内容实际,实用性强
本书并不局限于枯燥的理论介绍,而是采用“项目驱动”的方式来讲授知识点,每个知识点几乎都可找到对应的参考实例。本书最后还提供了《疯狂连连看》游戏应用,具有极高的参考价值。
3.讲解详细,上手容易
只要读者有学习的决心和毅力,学完本书内容后就打下扎实的iOS开发基础,再通过本书下卷来掌握iOS开发的高级知识,即可完全胜任企业中 iOS开发者的实际要求。
本书为所有打算深入掌握iOS编程的读者而编写,适合各层次的iOS学习者和开发者阅读,也适合作为大学教育、培训机构的iOS教材。但如果只是想简单涉猎iOS应用开发,则本书过于庞大,不适合阅读。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。