第一部分 Objective-C简介第1章 C,Objective-C的基础 2
1.1 C程序的结构 3
1.1.1 main函数 3
1.1.2 格式化 3
1.1.3 注释 4
1.1.4 变量和函数名 4
1.1.5 命名惯例 5
1.1.6 文件 5
1.2 变量 6
1.2.1 整数类型 6
1.2.2 浮点类型 7
1.2.3 真值 7
1.2.4 初始化 7
1.2.5 指针 8
1.2.6 数组 9
1.2.7 字符串 10
1.2.8 结构 10
1.2.9 typedef 12
1.2.10 枚举常量 12
1.3 运算符 12
1.3.1 算术运算符 12
1.3.2 余数运算符 13
1.3.3 自增和自减运算符 13
1.3.4 优先级 13
1.3.5 取反 14
1.3.6 比较 14
1.3.7 逻辑运算符 14
1.3.8 逻辑取反 15
1.3.9 赋值运算符 15
1.3.10 转换和强制类型转换 16
1.3.11 其他赋值运算符 16
1.4 表达式和语句 17
1.4.1 表达式 17
1.4.2 计算表达式 17
1.4.3 语句 18
1.4.4 复合语句 18
1.5 程序流程 18
1.5.1 if 18
1.5.2 条件表达式 19
1.5.3 while 20
1.5.4 do-while 20
1.5.5 for 20
1.5.6 break 21
1.5.7 continue 22
1.5.8 逗号表达式 22
1.5.9 switch 22
1.5.10 goto 23
1.5.11 函数 24
1.5.12 声明函数 25
1.6 预处理器 26
1.6.1 包含文件 26
1.6.2 #define 26
1.6.3 条件编译 27
1.7 printf 28
1.8 使用gcc和gdb 29
1.9 小结 30
1.10 练习 30
第2章 C变量 33
2.1 Objective-C程序的内存布局 33
2.2 自动变量 34
2.3 外部变量 35
2.4 声明关键字 35
2.4.1 auto 35
2.4.2 extern 36
2.4.3 static 36
2.4.4 register 37
2.4.5 const 37
2.4.6 volatile 37
2.5 作用域 38
2.5.1 自动变量的作用域 38
2.5.2 复合语句和作用域 38
2.5.3 外部变量的作用域 39
2.6 动态分配 39
2.7 小结 41
2.8 练习 42
第3章 面向对象编程简介 43
3.1 面向对象编程 43
3.1.1 类和实例 43
3.1.2 方法 44
3.1.3 封装 44
3.1.4 继承 44
3.1.5 多态 45
3.1.6 面向对象语言的主要特点是什么 45
3.2 Objective-C简介 45
3.2.1 定义类 46
3.2.2 类名作为类型 48
3.2.3 消息(调用方法) 48
3.2.4 类对象和对象创建 50
3.2.5 内存管理 51
3.3 Objective-C添加 51
3.3.1 运行时 51
3.3.2 名称 52
3.3.3 消息表达式 52
3.3.4 编译器指令 52
3.3.5 直接量字符串 52
3.3.6 Objective-C关键字 53
3.3.7 Cocoa数字类型 55
3.4 小结 56
第4章 第一个Objective-C程序 57
4.1 使用Xcode构建 57
4.2 Objective-C程序结构 59
4.3 面向对象的Hello World 61
4.3.1 Greeter.h 63
4.3.2 Greeter.m 65
4.4 HelloObjectiveC.m 68
4.5 小结 69
4.6 练习 70
第二部分 语言基础 72
第5章 消息 72
5.1 方法 72
5.1.1 一个简单的方法 72
5.1.2 带有参数的方法 73
5.2 消息 74
5.3 消息细节 76
5.3.1 嵌套 76
5.3.2 向nil发送消息 77
5.3.3 向self发送消息 78
5.3.4 覆盖并向super发送消息 78
5.3.5 选择器 80
5.3.6 具有相同名称的方法 81
5.3.7 动态类型和静态类型 82
5.4 幕后工作 83
5.5 消息转发 84
5.6 效率 85
5.7 内省和其他运行时乐趣 87
5.8 小结 88
5.9 练习 88
第6章 类和对象 90
6.1 定义类 90
6.1.1 接口部分 90
6.1.2 @class指令 91
6.1.3 实现部分 92
6.1.4 导入 92
6.2 子类化一个类 93
6.2.1 定义一个子类 93
6.2.2 子类示例 94
6.2.3 类继承 97
6.2.4 类层级示例 97
6.2.5 抽象类 98
6.3 创建对象 99
6.3.1 对象分配 99
6.3.2 对象初始化 100
6.4 销毁对象 106
6.5 复制对象 107
6.5.1 浅复制和深复制 108
6.5.2 可变复制和不可变复制 108
6.5.3 在自己的类中实现复制 109
6.6 小结 111
6.7 练习 112
第7章 类对象 113
7.1 类对象 113
7.1.1 类类型 114
7.1.2 类方法 115
7.2 其他类方法 116
7.2.1 简便构造函数 116
7.2.2 单体 118
7.2.3 初始化类 118
7.3 模拟类变量 120
7.4 小结 124
7.5 练习 125
第8章 框架 127
8.1 什么是框架 127
8.2 Cocoa框架 128
8 3 AppKit 129
8 4 Core Foundation 130
8.4.1 Core Foundation对象的内存管理 131
8.4.2 自由转换 132
8 5 Core Graphics 133
8 6 Core Animation 133
8.7 其他Apple提供的框架 134
8.8 第三方框架 134
8.9 幕后揭秘 135
8.10 小结 135
第9章 常用Foundation类 136
9.1 可变类和不可变类 136
9.2 类簇 136
9.3 NSString 137
9.3.1 NSString示例 138
9.3.2 C字符串和NSString之间的转换 140
9.3.3 直接量字符串 141
9.4 集合类 141
9.4.1 NSArray 141
9.4.2 NSDictionary 144
9.4.3 NSSet 145
9 5 NSNumber 146
9 6 NSNull 147
9 7 NSData 148
9.7.1 访问NSData的字节 149
9.7.2 文件和NSData之间的转换 149
9.8 NSURL 149
9.9 结构 150
9.10 小结 151
9.11 练习 151
第10章 Objective-C中的控制结构 153
10.1 if语句 153
10.2 for语句和隐式循环 156
10.2.1 for语句 156
10.2.2 隐式循环 156
10.2.3 带有块的隐式循环 157
10.3 while语句和NSEnumerator 157
10.4 快速枚举 159
10.5 一个使用快速枚举的示例 161
10.6 异常 164
10.6.1 抛出自己的异常 165
10.6.2 多个@catch语句块 166
10.6.3 嵌套异常处理 167
10.6.4 使用异常 168
10.6.5 应该使用异常吗 168
10.7 小结 170
10.8 练习 170
第11章 分类、扩展和安全 172
11.1 分类 172
11.1.1 使用分类覆盖方法 174
11.1.2 分类的其他用法 175
11.2 扩展 176
11.3 实例变量作用域(访问控制) 177
11.4 对方法的访问控制 178
11.5 命名空间 179
11.6 安全 179
11.7 从Objective-C调用C函数 181
11.7.1 技术上 181
11.7.2 实践上 182
11.7.3 哲学上 182
11.8 小结 182
11.9 练习 182
第12章 特性 184
12.1 在对象之外访问实例变量(不要这么做) 184
12.2 声明和实现访问器 185
12.3 使用特性的访问器 187
12.4 @property语句 189
12.4.1 assign、retain和copy 189
12.4.2 readwrite和readonly 190
12.4.3 nonatomic 190
12.4.4 setter=nam和getter=name 191
12.4.5 attributes和@dynamic 191
12.5 关于@dynamic的更多内容 191
12.6 特性和内存管理 193
12.7 子类化和特性 194
12.8 对readonly特性隐藏setter 195
12.9 特性作为文档 195
12.10 点语法 196
12.10.1 点语法和特性 197
12.10.2 点语法和C结构 198
12.11 小结 199
12.12 练习 199
第13章 协议 201
13.1 协议 201
13.2 使用协议 202
13.2.1 声明一个协议 202
13.2.2 采用协议 203
13.2.3 协议作为类型 203
13.2.4 特性和协议 203
13.3 TablePrinter示例 204
13.3.1 TablePrinterDataSource 205
13.3.2 TablePrinter 205
13.3.3 FruitBasket 207
13.3.4 main 209
13.3.5 一个问题 210
13.3.6 实现可选的方法 210
13.4 协议对象和一致性测试 211
13.5 非正式协议 212
13.6 小结 212
13.7 练习 213
第三部分 高级概念 216
第14章 引用计数 216
14.1 问题 216
14.2 引用计数 217
14.3 接受对象 219
14.4 所有权 221
14.5 dealloc 222
14.6 返回对象 223
14.6.1 autorelease 224
14.6.2 自动释放池 224
14.6.3 管理自动释放池 225
14.6.4 回顾简便构造函数 226
14.6.5 自动释放和iPhone 226
14.6.6 使用额外的自动释放池来控制内存使用 226
14.7 retainCount 227
14.8 多线程 228
14.9 何时引用计数不好 229
14.10 保留循环 230
14.11 最后说再见:曲终人散时 233
14.12 小结 233
14.13 练习 234
第15章 垃圾收集 236
15.1 垃圾收集:理论 236
15.2 垃圾收集:实践 237
15.3 使用垃圾收集器 238
15.4 终结器 240
15.5 malloc和垃圾收集 241
15.6 Core Foundation对象和垃圾收集 241
15.7 过程中的一些难点 242
15.7.1 AppKit中的透明指针问题 242
15.7.2 内部指针 245
15.7.3 错误的根对象 246
15.8 垃圾收集的优点和缺点 246
15.8.1 积极方面 246
15.8.2 消极方面 246
15.8.3 应该使用垃圾收集吗 246
15.9 小结 247
15.10 练习 247
第16章 块 251
16.1 函数指针 251
16.1.1 用函数指针调用一个函数 253
16.1.2 使用函数指针 253
16.2 使用函数指针的问题 255
16.3 NSInvocation 256
16.4 块&. 258
16.4.1 块指针 258
16.4.2 访问变量 259
16.4.3 块变量 261
16.4.4 块是基于栈的 261
16.4.5 全局块 262
16.4.6 块是Objective-C对象 262
16.4.7 复制块 262
16.4.8 块的内存管理 263
16.4.9 陷阱 265
16.4.10 Cocoa中的块 266
16.4.11 样式问题 269
16.5 一些原理上的限制 270
16.6 小结 270
16.7 练习 270
第四部分 附录 274
附录A 保留字和编译器指令 274
附录B 自由转换类 275
附录C 32位和64位 276
附录D 运行时,旧的和新的 279
附录E Objective-C的资源 282