iOS开发指南:从零基础到App Store上架(第2版)

出版社:人民邮电出版社
出版日期:2014-4-1
ISBN:9787115348029
作者:关东升
页数:699页

内容概要

关东升
国内知名iOS技术作家,iOS技术顾问,高级培训讲师,移动开发专家。担任51CTO社区iOS技术顾问,精通iOS、Android和Windows Phone及HTML5等移动开发技术。曾先后主持开发大型网络游戏《神农诀》的iOS和Android客户端开发,国家农产品追溯系统的iPad客户端开发,酒店预订系统的iPhone客户端开发,金融系统微博的iOS、Windows Phone 及Android客户端开发。在App Store上发布多款游戏和应用软件,擅长移动平台的应用和游戏类项目开发。长期为中国移动研究院、云南移动、东软、方正科技、大唐电信、中石油、深圳康拓普、上海财富168、天津港务局等企事业单位授课。除本书外,还著有《iOS网络编程与云端应用最佳实践》、《iOS传感器应用开发最佳实践》、《iOS多媒体编程技术最佳实践》、《iPhone与iPad开发实战——iOS经典应用剖析》、《品味移动设计》、《交互设计的艺术》、《Android开发案例驱动教程》、《Android网络游戏开发实战》,以及《JSP网络程序设计》等书。

书籍目录

第一部分  基  础  篇
第1章 开篇综述  2
1.1  iOS概述  2
1.1.1  iOS介绍  2
1.1.2  iOS 7新特性  2
1.2  开发环境及开发工具  3
1.3  本书中的约定  4
1.3.1  案例代码约定  5
1.3.2  图示的约定  5
第2章 第一个iOS应用程序  7
2.1  创建HelloWorld工程  7
2.1.1  创建工程  7
2.1.2  Xcode中的iOS工程模板  12
2.1.3  应用剖析  13
2.2  HelloWorld工程中故事板文件Main.storyboard  16
2.2.1  故事板的导航特点  16
2.2.2  故事板中的Scene和Segue  17
2.3  应用生命周期  17
2.3.1  非运行状态——应用启动场景  19
2.3.2  点击Home键——应用退出场景  20
2.3.3  挂起重新运行场景  21
2.3.4  内存清除——应用终止场景  22
2.4  视图生命周期  22
2.4.1  视图生命周期与视图控制器关系  23
2.4.2  iOS UI状态保持和恢复  24
2.5  设置产品属性  26
2.5.1  Xcode中的Project和Target  26
2.5.2  设置常用的产品属性  28
2.6  iOS API简介  30
2.6.1  API概述  30
2.6.2  如何使用API帮助  32
2.7  小结  34
第3章 UIView与控件  35
3.1  视图“始祖”——UIView  35
3.1.1  UIView“家族”  35
3.1.2  应用界面的构建层次  37
3.1.3  视图分类  38
3.2  标签控件和按钮控件  38
3.2.1  标签控件  39
3.2.2  按钮控件  39
3.2.3  动作和输出口  41
3.3  TextField控件和TextView控件  43
3.3.1  TextField控件  44
3.3.2  TextView控件  44
3.3.3  键盘的打开和关闭  45
3.3.4  关闭和打开键盘的通知  46
3.3.5  键盘的种类  47
3.4  开关控件、滑块控件和分段控件  48
3.4.1  开关控件  49
3.4.2  滑块控件  49
3.4.3  分段控件  49
3.5  网页控件WebView  50
3.5.1  WebView介绍  50
3.5.2  使用WebView构建Hybrid应用  53
3.6  屏幕滚动控件ScrollView  58
3.6.1  ScrollView属性的设置  58
3.6.2  键盘与其他控件的协同  63
3.7  等待相关的控件与进度条  65
3.7.1  活动指示器ActivityIndicatorView  66
3.7.2  进度条ProgressView  66
3.8  警告框和操作表  67
3.8.1  警告框AlertView  67
3.8.2  操作表ActionSheet  69
3.9  工具栏和导航栏  70
3.9.1  工具栏  70
3.9.2  导航栏  73
3.10  屏幕布局  77
3.10.1  iPad、iPhone和iPhone 5屏幕布局  77
3.10.2  绝对布局和相对布局  78
3.10.3  使用AutoLayout布局  80
3.10.4  旋转你的屏幕  82
3.11  选择器  86
3.11.1  日期选择器  86
3.11.2  普通选择器  88
3.11.3  数据源协议与委托协议  90
3.12  集合视图  92
3.12.1  集合视图介绍  92
3.12.2  集合视图单元格  94
3.12.3  数据源协议与委托协议  97
3.13  小结  97
第4章 表视图  98
4.1  概述  98
4.1.1  表视图的组成  98
4.1.2  表视图的相关类  99
4.1.3  表视图分类  100
4.1.4  单元格的组成和样式  103
4.1.5  数据源协议与委托协议  105
4.2  简单表视图  106
4.2.1  创建简单表视图  106
4.2.2  自定义单元格  110
4.2.3  添加搜索栏  114
4.3  分节表视图  119
4.3.1  添加索引  119
4.3.2  分组与静态表  122
4.4  修改单元格  126
4.4.1  删除和插入单元格  126
4.4.2  移动单元格  132
4.5  表视图UI设计模式  134
4.5.1  分页模式  134
4.5.2  下拉刷新模式  134
4.5.3  iOS 7下拉刷新控件  135
4.6  小结  137
第5章 视图控制器与导航模式  138
5.1  概述  138
5.1.1  视图控制器的种类  138
5.1.2  导航模式  138
5.1.3  模态视图  139
5.2  平铺导航  145
5.2.1  应用场景  145
5.2.2  基于分屏导航的实现  147
5.2.3  基于分页导航的实现  150
5.3  标签导航  156
5.3.1  应用场景  157
5.3.2  实现  157
5.4  树形结构导航  159
5.4.1  应用场景  160
5.4.2  实现  161
5.5  组合使用导航模式  165
5.5.1  应用场景  166
5.5.2  实现  166
5.6  小结  173
第6章 iOS常用设计模式  174
6.1  单例模式  174
6.1.1  问题提出  174
6.1.2  实现原理  174
6.1.3  应用案例  175
6.2  委托模式  177
6.2.1  问题提出  177
6.2.2  实现原理  178
6.2.3  应用案例  181
6.3  观察者模式  184
6.3.1  问题提出  184
6.3.2  实现原理  185
6.3.3  通知机制和KVO机制  187
6.4  MVC模式  193
6.4.1  MVC模式概述  193
6.4.2  Cocoa Touch中的MVC模式  194
6.5  小结  196
第7章 iPhone与iPad应用开发的差异  197
7.1  概述  197
7.1.1  应用场景差异  197
7.1.2  设计和开发需注意的问题  197
7.1.3  构建自适应的iPhone和iPad工程  200
7.2  iPad专用API  202
7.2.1  UIPopoverController控制器  202
7.2.2  UISplitViewController控制器  205
7.2.3  模态视图专用属性  211
7.3  小结  215
第8章 iOS分层架构设计  216
8.1  低耦合企业级系统架构设计  216
8.2   iOS分层架构设计  217
8.2.1  基于同一工程的分层  217
8.2.2  基于一个工作空间不同工程的分层  222
8.3  小结  227
第9章 iOS 7中文字排版和渲染引擎——Text Kit  228
9.1  Text Kit基础  228
9.1.1  文字的排版和渲染  228
9.1.2  Text Kit架构  228
9.1.3  Text Kit中的核心类  229
9.1.3  实例:凸版印刷效果  231
9.2  文字图片混合排版  233
9.3  动态字体  236
9.4  小结  239
第10章 应用程序设置  240
10.1  概述  240
10.1.1  设置  240
10.1.2  配置  241
10.2  应用程序设置包  243
10.3  设置项目种类  244
10.3.1  文本字段  247
10.3.2  开关  249
10.3.3  滑块  250
10.3.4  值列表  252
10.3.5  子界面  253
10.4  读取设置  255
10.5  小结  256
第11章 国际化  257
11.1  概述  257
11.1.1  需要国际化的内容  257
11.1.2  国际化目录结构  259
11.2  文本信息国际化  260
11.2.1  系统按钮和信息国际化  260
11.2.2  应用名称国际化  261
11.2.3  程序代码输出的静态文本国际化  263
11.2.4  使用genstring工具  265
11.3  xib和故事板文件国际化  266
11.3.1  使用Base国际化技术  266
11.3.2  AutoLayout与国际化  268
11.4  资源文件国际化  270
11.4.1  图片资源文件国际化  270
11.4.2  声音资源文件国际化  271
11.5  小结  271
第12章 数据持久化  272
12.1  概述  272
12.1.1  沙箱目录  272
12.1.2  持久化方式  273
12.2  属性列表  273
12.3  对象归档  278
12.4  使用SQLite数据库  282
12.4.1  SQLite数据类型  283
12.4.2  创建数据库  283
12.4.3  查询数据  285
12.4.4  修改数据  288
12.5  Core Data  290
12.5.1  ORM  290
12.5.2  Core Data堆栈  290
12.5.3  建模和生成实体  294
12.5.4  采用Core Data分层架构设计  297
12.5.5  查询数据  298
12.5.6  修改数据  300
12.6  小结  301
第13章 访问通讯录  302
13.1  概述  303
13.2  读取联系人信息  303
13.2.1  查询联系人记录  304
13.2.2  读取单值属性  306
13.2.3  读取多值属性  308
13.2.4  读取图片属性  310
13.3  写入联系人信息  310
13.3.1  创建联系人  312
13.3.2  修改联系人  314
13.3.3  删除联系人  315
13.4  高级API  316
13.4.1  选择联系人  316
13.4.2  显示和修改联系人  319
13.4.3  创建联系人  322
13.5  小结  325
第二部分  网  络  篇
第14章 访问Web Service  328
14.1  概述  328
14.2  数据交换格式  328
14.2.1  XML文档结构  330
14.2.2  解析XML文档  331
14.2.3  JSON文档结构  338
14.2.4  JSON数据解码  339
14.3  REST Web Service  341
14.3.1  HTTP和HTTPS协议  341
14.3.2  同步GET请求方法  342
14.3.3  异步GET请求方法  346
14.3.4  POST请求方式  347
14.3.5  调用REST Web Service的插入、修改和删除方法  348
14.4  使用轻量级网络请求框架MKNetworkKit  352
14.4.1  ASIHTTPRequest、AFNetworking和MKNetworkKit比较  353
14.4.2  安装和配置MKNetworkKit框架  353
14.4.3  网络请求  354
14.4.4  下载数据  356
14.4.5  上传数据  358
14.5  反馈网络信息改善用户体验  359
14.5.1  使用下拉刷新控件改善用户体验  359
14.5.2  使用等待指示器控件  362
14.5.3  使用网络等待指示器  365
14.6  小结  366
第15章 定位服务与地图应用  367
15.1  定位服务  367
15.1.1  定位服务编程  368
15.1.2  地理信息反编码  372
15.1.3  地理信息编码查询  373
15.1.4  关于定位服务的测试  375
15.2  使用iOS苹果地图  378
15.2.1  显示地图  378
15.2.2  添加标注  380
15.2.3  跟踪用户位置变化  383
15.3  使用程序外地图  384
15.3.1  调用iOS苹果地图  384
15.3.2  调用谷歌Web地图  387
15.4  小结  388
第三部分  进  阶  篇
第16章 升级?  390
16.1  从iOS 6到iOS 7的升级  390
16.1.1  iOS 7全新的扁平化设计  391
16.1.2  屏幕适配问题  394
16.1.3  iOS 7状态栏隐藏  396
16.1.4  iOS 7状态栏样式设置  397
16.2  从Xcode 4到Xcode 5的升级  399
16.2.1  ARC与MRC之争  399
16.2.2  故事板与xib之争  402
16.2.3  找回普通显示屏的模拟器  407
16.2.4  找回老版本的Interface Builder  408
16.2.5  使用资源目录管理图片  409
16.3  从iPhone 4到iPhone 5的升级  412
16.3.1  屏幕适配问题  413
16.3.2  从32位到64位的升级  416
16.4  小结  417
第17章 iOS中的商业模式  418
17.1  收费策略  418
17.1.1  iOS如何赚钱  418
17.1.2  避免定价策略误区  419
17.1.3  免费软件的艺术  419
17.1.4  在适当的时间、适当的地点植入广告  419
17.1.5  尝试不同的盈利模式  419
17.2  使用苹果iAd广告  420
17.2.1  横幅广告  420
17.2.2  插页广告  425
17.2.3  查看你的收入  430
17.3  使用谷歌AdMob广告  432
17.3.1  注册AdMob账号和管理应用  432
17.3.2  下载谷歌AdMob Ads SDK和示例代码  435
17.3.3  添加AdMob横幅广告  437
17.3.4  添加AdMob插页广告  442
17.3.5  为广告提交用户和位置信息  445
17.3.6  搜索广告  446
17.3.7  查看你的收入  448
17.4  应用内购买  449
17.4.1  概述  449
17.4.2  测试环境搭建  450
17.4.3  在程序中实现应用内购买  455
17.4.4  测试应用内购买  461
17.5  小结  463
第18章 找出程序中的bug——调试  464
18.1  Xcode调试工具  464
18.1.1  定位编译错误  464
18.1.2  查看和显示日志  465
18.1.3  设置和查看断点  466
18.1.4  调试工具栏  470
18.1.5  输出窗口  471
18.1.6  变量查看窗口  473
18.1.7  查看线程  474
18.2  日志与断言输出  475
18.2.1  使用NSLog函数  475
18.2.2  使用NSAssert宏  476
18.2.3  移除NSLog和NSAssert  477
18.3  LLDB调试工具  479
18.3.1  断点命令  480
18.3.2  观察点命令  482
18.3.3  查看变量和计算表达式命令  483
18.4  异常堆栈报告分析  485
18.4.1  跟踪异常堆栈  485
18.4.2  分析堆栈报告  488
18.5  在iOS设备上调试  488
18.5.1  创建开发者证书  489
18.5.2  设备注册  493
18.5.3  创建App ID  495
18.5.4  创建配置概要文件  497
18.5.5  设备调试  501
18.6  Xcode设备管理工具  502
18.6.1  管理设备配置概要文件  503
18.6.2  查看设备上的应用程序  504
18.6.3  设备控制台  505
18.6.4  设备日志  505
18.7  小结  506
第19章 测试驱动下的iOS应用开发  507
19.1  测试驱动的软件开发概述  507
19.1.1  测试驱动的软件开发流程  507
19.1.2  测试驱动的软件开发案例  508
19.1.3  iOS 7单元测试框架  513
19.2  使用XCTest测试框架  513
19.2.1  添加XCTest到工程  514
19.2.2  编写XCTest测试方法  515
19.2.3  运行测试程序  521
19.2.4  分析测试报告  521
19.3  iOS单元测试最佳实践  523
19.3.1  测试数据持久层  523
19.3.2  测试业务逻辑层  527
19.3.3  测试表示层  529
19.4  小结  531
第20章 让你的程序“飞”起来——性能优化  532
20.1  内存优化  532
20.1.1  内存泄漏问题的解决  532
20.1.2  查找和解决僵尸对象  540
20.1.3  autorelease的使用问题  543
20.1.4  响应内存警告  543
20.1.5  选择xib还是故事板  545
20.2  优化资源文件  545
20.2.1  图片文件优化  546
20.2.2  音频文件优化  548
20.3  延迟加载  549
20.3.1  资源文件的延迟加载  549
20.3.2  故事板和xib文件的延迟加载  553
20.4  数据持久化的优化  555
20.4.1  使用文件  555
20.4.2  使用SQLite数据库  559
20.4.3  使用Core Data  560
20.5  可重用对象的使用  562
20.5.1  表视图中的可重用对象  562
20.5.2  集合视图中的可重用对象  564
20.5.3  地图视图中的可重用对象  565
20.6  并发处理与多核CPU  565
20.6.1  主线程阻塞问题  566
20.6.2  选择NSThread还是GCD  566
20.7  编译参数  568
20.8  小结  569
第21章 管理好你的程序代码——代码版本控制  570
21.1  概述  570
21.1.1  版本控制历史  570
21.1.2  基本概念  571
21.2  Git代码版本控制  571
21.2.1  服务器搭建  571
21.2.2  Gitolite服务器管理  573
21.2.3  Git常用命令  575
21.2.4  Git分支  577
21.2.5  Git协同开发  581
21.2.6  Xcode 5中Git的配置与使用  583
21.3  GitHub代码托管服务  590
21.3.1  创建和配置GitHub账号  590
21.3.2  创建代码库  592
21.3.3  派生代码库  595
21.3.4  使用GitHub协同开发  597
21.3.5  管理组织  601
21.4  小结  605
第22章 把你的应用放到App Store上  606
22.1  收官  606
22.1.1  在Xcode 5下添加图标  606
22.1.2  Xcode 5添加启动界面  608
22.1.3  调整Identity和Deployment Info属性  611
22.1.4  为发布进行编译  612
22.1.5  应用打包  618
22.2  发布流程  619
22.2.1  创建应用及基本信息  620
22.2.2  应用定价信息  621
22.2.3  最后的信息输入  622
22.2.4  上传应用  625
22.3  审核不通过的常见原因  627
22.4  小结  628
第四部分  实  战  篇
第23章 重构MyNotes应用——iOS网络通信中的设计模式与架构设计  630
23.1  移动网络通信应用的分层架构设计  630
23.2  基于委托模式实现  631
23.2.1  网络通信与委托模式  631
23.2.2  在异步网络通信中使用委托模式实现分层架构设计  631
23.2.3  类图  632
23.2.4  时序图  634
23.2.5  数据持久层重构  637
23.2.6  业务逻辑层的代码实现  640
23.2.7  表示层的代码实现  642
23.3  基于观察者模式的通知机制实现  646
23.3.1  观察者模式的通知机制回顾  646
23.3.2  异步网络通信中通知机制的分层架构设计  647
23.3.3  类图  647
23.3.4  时序图  648
23.3.5  数据持久层的重构  651
23.3.6  业务逻辑层的代码实现  653
23.3.7  表示层的代码实现  653
23.4  小结  658
第24章 iOS敏捷开发项目实战——2016里约热内卢奥运会应用开发及App
Store发布  659
24.1  应用分析与设计  659
24.1.1  应用概述  659
24.1.2  需求分析  659
24.1.3  原型设计  660
24.1.4  数据库设计  660
24.1.5  架构设计  662
24.2  iOS敏捷开发  662
24.2.1  敏捷开发宣言  662
24.2.2  iOS适合敏捷开发吗  663
24.2.3  iOS敏捷开发最佳实践  663
24.3  任务1:创建应用基本工作空间  665
24.4  任务2:信息系统层与持久层开发  666
24.4.1  迭代2.1:编写数据库DDL脚本  666
24.4.2  迭代2.2:插入初始数据到数据库  667
24.4.3  迭代2.3:编写实体类  667
24.4.4  迭代2.4:DAO类XCTest单元测试  668
24.4.5  迭代2.5:编写DAO类  672
24.4.6  迭代2.6:发布到GitHub  676
24.5  任务3:业务逻辑层开发  676
24.5.1  迭代3.1:比赛项目业务逻辑类XCTest单元测试  676
24.5.2  迭代3.2:编写比赛项目业务逻辑类  677
24.5.3  迭代3.3:比赛日程业务逻辑类XCTest单元测试  678
24.5.4  迭代3.4:编写比赛日程业务逻辑类  679
24.5.5  迭代3.5:发布到GitHub  681
24.6  任务4:表示层开发  681
24.6.1  迭代4.1:使用资源目录管理图片和图标资源  682
24.6.2  迭代4.3:根据原型设计初步设计iPad故事板  683
24.6.3  迭代4.3:根据原型设计初步设计iPhone故事板  684
24.6.4  迭代4.4:首页模块  684
24.6.5  迭代4.5:比赛项目模块  685
24.6.6  迭代4.6:比赛日程模块  690
24.6.7  迭代4.7:倒计时模块表示层  692
24.6.8  迭代4.8:关于我们模块表示层  694
24.6.9  迭代4.9:发布到GitHub  694
24.7  任务5:收工  694
24.7.1  迭代5.1:添加图标  695
24.7.2  迭代5.2:设计和添加启动界面  695
24.7.3  迭代5.3:植入谷歌AdMob横幅广告  695
24.7.4  迭代5.4:性能测试与改善  696
24.7.5  迭代5.5:发布到GitHub  697
24.7.6  迭代5.6:在App Store上发布应用  697
24.8  小结  699

作者简介

本书采用全新的iOS 7 API,详细介绍了iOS 7开发相关的知识点。本书共分为4个部分:第一部分为基础篇,介绍了iOS的一些基础知识;第二部分为网络篇,介绍了iOS网络开发相关的知识;第三部分为进阶篇,介绍了iOS高级内容、商业思考等;第四部分为实战篇,从无到有地介绍了两个真实的iOS应用:MyNotes应用和2016里约热内卢奥运会应用。
本书适用于iOS应用开发人员、大学老师、培训学员以及对于iOS开发感兴趣的群体使用,也可作为iOS培训教材使用。


 iOS开发指南:从零基础到App Store上架(第2版)下载 更多精彩书评



发布书评

 
 


精彩书评 (总计2条)

  •     这本书真的写的很详细很全面,而且深度适宜。从字里行间,能明显的看出作者确实在移动开发领域经验颇丰,有深度也有自己的见解。 我阅读了大概好几本iOS开发教程,我认为这本算是中国作者里写的最棒的一本。美国人写的那几本经典教程当然也不错,但因为有延时性,或者看原版又相对速度慢一些,所以这本书我是极力推荐的。 有部分iOS初学同学不是特别推荐关东升这本书,可能是因为他没有以傻瓜式的一步一步的教你如何操作,部分操作细节略有疏忽,而且内容节奏较快,所以有些同学会略有不适。如果这样,建议初学的朋友可以先选择一本更肤浅一点的中国作者编写的iOS入门教程,待开发较为熟悉的时候再看这本书。 这本书内容涵盖比较完善,而且大部分内容都比较常用,所以学习和参考都不错!
  •     内容东拼西凑,甚至都感觉不是一个人写的,衔接做的非常不好,另外名副其实,不适合不懂objc的初学者第二章,保存输入框的输入状态,我是没有弄成功,谁如果严格按照书上写的步骤弄成功了,请告知我一声。我7.1还有第49页顶部的“开关控件”,原文如下:“从对象库拖拽两个开关空间到界面,然后为两个开关空间指定出口……”。指定出口是神马东东?好吧,我太菜了,写给零基础的人我都看不懂,但我至少还可以勉强看懂Big Nerd Ranch Guide的IOS编程,至少没有感觉这样吃力,至少人家用词都统一,不会出现一会英文叫法,一会中文叫法……对图灵一直很信任,但是这次太让人失望,后面的,也不想看了,如果骂人可以挽回我快80大洋的话,我一定要祝福他全家。

精彩短评 (总计10条)

  •     书中代码是Object-C的,但是用swfit重写了一遍
  •     iOS基础,案例很详细
  •     这本书真的写的很详细很全面,而且深度适宜。从字里行间,能明显的看出作者确实在移动开发领域经验颇丰,有深度也有自己的见解。 我阅读了大概好几本iOS开发教程,我认为这本算是中国作者里写的最棒的一本。美国人写的那几本经典教程当然也不错,但因为有延时性,或者看原版又相对速度慢一些,所以这本书我是极力推荐的。 有部分iOS初学同学不是特别推荐关东升这本书,可能是因为他没有以傻瓜式的一步一步的教你如何操作,部分操作细节略有疏忽,而且内容节奏较快,所以有些同学会略有不适。如果这样,建议初学的朋友可以先选择一本更肤浅一点的中国作者编写的iOS入门教程,待开发较为熟悉的时候再看这本书。 这本书内容涵盖比较完善,而且大部分内容都比较常用,所以学习和参考都不错!
  •     比较鸡肋的一本书,700页,优点是内容比较全,基本知识点都有覆盖,但是每个知识点也都没有讲清楚,没有侧重点,整本书都在用storyboard拉线,服了。
  •     基本就是为了看懂这本书在写什么才努力的在其他地方学习ios 而不是因为看了这本书才会的iOS开发
  •     凑合着看,但是并不是很适合初学者。建议看这本书之前,需要先掌握objective-c语言,否则会看得很吃力。
  •     想看懂此书需要c和oc基础 不是标题所说的零基础 对于有基础的新人来说 是一本不错的入门书 开发案例特别多也很实用 只是不少案例版本比较旧 最新的Xcode不支持 作者要是能改改就更好了
  •     作为入门来讲,还是本不错的,基础面面俱到的书
  •     说是零基础,但是真正零基础的能看懂就见鬼了。 不讲语言基础,不讲开发流程,ios基础的东西倒是讲了不少,但是不详细,看了跟没看似的。 如果只看这本书,看完估计连个简单的小应用都做不出来。
  •     讲的还不错,只是不够细,重点讲的还是挺好。适合初学者
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024