您好,欢迎光临有路网!
Objective C程序设计第4版
QQ咨询:
有路璐璐:

Objective C程序设计第4版

  • 作者:Stephen G Kochan 斯蒂芬G科昌
  • 出版社:电子工业出版社
  • ISBN:9787121180910
  • 出版日期:2012年09月01日
  • 页数:512
  • 定价:¥89.00
  • 分享领佣金
    手机购买
    城市
    店铺名称
    店主联系方式
    店铺售价
    库存
    店铺得分/总交易量
    发布时间
    操作

    新书比价

    网站名称
    书名
    售价
    优惠
    操作

    图书详情

    内容提要
    这是一本Objective-C编程领域*畅销的书籍,内容涵盖Xcode 4.2和自动引用计数(ARC)。
    本书详细介绍了Objective-C和苹果iOS、Mac平台面向对象程序编程的知识。
    本书结合独特的学习方法,在每章都编写有大量的小程序例子和练习,使Objective-C程序设计适合于课堂教学和自学。
    本书已经为iOS 5和Xcode 4.2中的重大变更做了全面更新,*大的改动是引入了自动引用计数(ARC),并详细说明了如何在Objective-C编程过程中使用ARC提升和简化内存管理。 Objective-C程序设计-第4版_Stephen G. Kochan(斯蒂芬·G·科昌)_电子工业出版社_
    文章节选
    实例变量的访问及数据封装
    你已经看到处理分数的方法如何通过名称直接访问两个实例变量numerator和denominator。事实上,实例方法总是可以直接访问它的实例变量的。然而,类方法则不能,因为它只处理本身,并不处理任何类实例(仔细想想)。但是,如果要从其他位置访问实例变量,例如,从main函数内部来访问,该如何实现?在这种情况下,不能直接访问这些实例变量,因为它们是隐藏的。将实例变量隐藏起来的这种做法实际上涉及一个关键概念——“数据封装”。它使得编写定义的人在不必担心程序员(即类的使用者)是否破坏类的内部细节的情况下,扩展和修改其定义。数据封装提供了程序员和其他***之间的良好隔离层。
    通过编写特殊方法来检索实例变量的值,可以用一种新的方式来访问它们。编写setNumerator:和setDenominator:方法用于给Fraction类的两个实例变量设定值。为了获取这些实例变量的值,我们需要编写新的方法。例如,创建两个名为numerator和denominator的新方法,用于访问相应的Fraction实例变量,这些实例是消息的接收者。结果是对应的整数值,你将返回这些值。以下是这两个新方法的声明:
    –(int) numerator;
    –(int) denominator;
    下面是定义:
    –(int) numerator
    {
    return numerator;
    }
    –(int) denominator
    {
    return denominator;
    }
    注意,它们访问的方法名和实例变量名是相同的,这样做不存在任何问题(虽然似乎有些奇怪)。事实上,这是很常见的情况。代码清单3-4用来测试这两个新方法。
    代码清单3-4
    // 访问实例变量的程序 – cont'd
    #import <Foundation/Foundation.h>
    //---- @interface 部分 ----
    @interface Fraction: NSObject
    -(void) print;
    -(void) setNumerator: (int) n;
    -(void) setDenominator: (int) d;
    -(int) numerator;
    -(int) denominator;
    @end
    //---- @implementation 部分 ----
    @implementation Fraction
    {
    int numerator;
    int denominator;
    }
    -(void) print
    {
    NSLog (@\"%i/%i\", numerator, denominator);
    }
    -(void) setNumerator: (int) n
    {
    numerator = n;
    }
    -(void) setDenominator: (int) d
    {
    denominator = d;
    }
    -(int) numerator
    {
    return numerator;
    }
    -(int) denominator
    {
    return denominator;
    }
    @end
    //---- program 部分 ----
    int main (int argc, char *argv[])
    {
    @autoreleasepool {
    Fraction *myFraction =
    [[Fraction alloc] init];
    // 设置分数为1/3
    [myFraction setNumerator:
    1];
    [myFraction setDenominator: 3];
    // 使用两个新的方法显示分数
    NSLog (@\"The value of myFraction
    is: %i/%i\",

    [myFraction numerator], [myFraction denominator]);
    }
    return 0;
    }
    代码清单3-4 输出
    The value of myFraction is 1/3
    NSLog语句显示发送给myFraction:的两条消息的结果,**条消息检索numerator的值,第二条则检索denominator的值。
    NSLog (@\"The value of myFraction is: %i/%i\",
    [myFraction numerator], [myFraction
    denominator]);
    在**条消息调用时,numerator消息会发送给Fraction类的对象myFraction。在这个方法中,分数中numerator的实例变量的值被返回。记住,方法执行的上下文环境就是接收到消息的对象。当访问numerator方法并且返回numerator实例变量值的时候,会取得myFraction的分子并返回,返回的整数传入NSLog,从而显示出来。第二条消息调用时,denominator方法会被调用并返回myFraction的分母,它仍通过NSLog显示。
    顺便说一下,设置实例变量值的方法通常总称为设值方法(setter),而用于检索实例变量值的方法叫做取值方法(getter)。对Fraction而言,setNumerator:和setDenominator:是设值方法,numerator和denominator是取值方法。取值方法和设值方法通常称为访问器(accessor)方法。
    确定你已经理解了设值方法和取值方法的不同。设值方法不会返回任何值,因为其主要目的是将方法参数设为对应的实例变量的值。在这种情况下并不需要返回值。另一方面,取值方法的目的是获取存储在对象中的实例变量的值,并通过程序返回发送出去。基于此目的,取值方法必须返回实例的值作为return的参数。
    你不能在类的外部编写方法直接设置或获取实例变量的值,而需要编写设值方法和取值方法来设置或获取实例变量的值,这便是数据封装的原则。你必须通过使用一些方法来访问这些通常对“外界”隐藏的数据。这种做法集中了访问实例变量的方式,并且能够阻止其他一些代码直接改变实例变量的值。如果可以直接改变,会让程序很难跟踪、调试和修改。
    这里还应指出,还有一个名为new的方法可以将alloc和init的操作结合起来。因此,程序行
    Fraction *myFraction = [Fraction new];
    可用于创建和初始化新的Fraction。但用两步来实现创建和初始化的方式通常更好,这样可以在概念上理解正在发生两个不同的事件:首先创建一个对象,然后对它初始化。
    目录
    目 录
    &#172;&#172;
    1 引言 1
    1.1 本书内容 2
    1.2 本书组织方式 3
    1.3 支持 5
    1.4 致谢 6
    1.5 第4版前言 7
    2 Objective-C编程 9
    2.1 编译并运行程序 9
    2.1.1 使用Xcode 10
    2.1.2 使用Terminal 16
    2.2 解释**个程序 19
    2.3 显示变量的值 23
    2.4 小结 25
    2.5 练习 26
    3 类、对象和方法 29
    3.1 到底什么是对象 29
    3.2 实例和方法 30
    3.3 用于处理分数的Objective-C类 32
    3.4 @interface部分 35
    3.4.1 选择名称 35
    3.4.3 类方法和实例方法 37
    3.5 @implementation部分 39
    3.6 program部分 41
    3.7 实例变量的访问及数据封装 47
    3.8 小结 51
    3.9 练习 51
    4 数据类型和表达式 53
    4.1 数据类型和常量 53
    4.1.1 int类型 53
    4.1.2 float类型 54
    4.1.3 char类型 54
    4.1.4 限定词:long、long long、short、unsigned及signed 56
    4.1.5 id类型 56
    4.2 算术表达式 57
    4.2.1 运算符的优先级 58
    4.2.2 整数运算和一元负号运算符 60
    4.2.3 模运算符 62
    4.2.4 整型值和浮点值的相互转换 64
    4.2.5 类型转换运算符 65
    4.3 赋值运算符 66
    4.4 Calculator类 67
    4.5 练习 70
    5 循环结构 73
    5.1 for语句 74
    5.1.1 键盘输入 81
    5.1.2 嵌套的for循环 83
    5.1.3 for循环的变体 85
    5.2 while语句 86
    5.3 do语句 90
    5.4 break语句 92
    5.5 continue语句 92
    5.6 小结 93
    5.7 练习 93
    6 选择结构 95
    6.1 if语句 95
    6.1.1 if-else结构 100
    6.1.2 复合条件测试 103
    6.1.3 嵌套的if语句 106
    6.1.4 else if结构 107
    6.2 switch语句 117
    6.3 Boolean变量 120
    6.4 条件运算符 125
    6.5 练习 127
    7 类 129
    7.1 分离接口和实现文件 129
    7.2 合成存取方法 134
    7.3 使用点运算符访问属性 136
    7.4 具有多个参数的方法 137
    7.4.1 不带参数名的方法 139
    7.4.2 关于分数的操作 140
    7.5 局部变量 142
    7.5.1 方法的参数 143
    7.5.2 static关键字 144
    7.6 self关键字 147
    7.7 在方法中分配和返回对象 148
    7.8 练习 151
    8 继承 153
    8.1 一切从根类开始 153
    8.2 通过继承来扩展:添加新方法 158
    8.2.1 Point类和对象创建 162
    8.2.2 @class指令 163
    8.2.3 具有对象的类 167
    8.3 覆写方法 171
    8.4 抽象类 175
    8.5 练习 176
    9 多态、动态类型和动态绑定 179
    9.1 多态:相同的名称,不同的类 179
    9.2 动态绑定和id类型 182
    9.3 编译时和运行时检查 184
    9.4 id数据类型与静态类型 185
    9.5 有关类的问题 187
    9.6 使用@try处理异常 192
    9.7 练习 194
    10 变量和数据类型 197
    10.1 对象的初始化 197
    10.2 作用域回顾 200
    10.2.1 控制实例变量作用域的指令 200
    10.2.2 全局变量 202
    10.2.3 静态变量 204
    10.3 枚举数据类型 207
    10.4 typedef语句 211
    10.5 数据类型转换 212
    10.6 位运算符 214
    10.6.1 按位与运算符 215
    10.6.2 按位或运算符 216
    10.6.3 按位异或运算符 217
    10.6.4 一次求反运算符 217
    10.6.5 向左移位运算符 219
    10.6.6 向右移位运算符 219
    10.7 练习 220
    11 分类和协议 223
    11.1 分类 223
    11.2 类的扩展 228
    11.3 协议和代理 230
    11.3.1 代理 233
    11.3.2 非正式协议 233
    11.4 合成对象 234
    11.5 练习 236
    12 预处理程序 239
    12.1 #define语句 239
    12.2 #import语句 246
    12.3 条件编译 247
    12.3.1 #ifdef、#endif、#else和#ifndef语句 247
    12.3.2 #if和#elif预处理程序语句 250
    12.3.3 #undef语句 251
    12.4 练习 251
    13 基本的C语言特性 253
    13.1 数组 254
    13.1.1 数组元素的初始化 256
    13.1.2 字符数组 257
    13.1.3 多维数组 258
    13.2 函数 260
    13.2.1 参数和局部变量 262
    13.2.2 函数的返回结果 263
    13.2.3 函数、方法和数组 267
    13.3 块(Blocks) 268
    13.4 结构 272
    13.4.1 结构的初始化 275
    13.4.2 结构中的结构 276
    13.4.3 关于结构的补充细节 278
    13.4.4 不要忘记面向对象编程思想 279
    13.5 指针 279
    13.5.1 指针和结构 283
    13.5.2 指针、方法和函数 285
    13.5.3 指针和数组 286
    13.5.4 指针运算 297
    13.5.5 指针和内存地址 299
    13.6 它们不是对象 299
    13.7 其他语言特性 300
    13.7.1 复合字面量 300
    13.7.2 goto语句 300
    13.7.3 空语句 301
    13.7.4 逗号运算符 301
    13.7.5 sizeof运算符 302
    13.7.6 命令行参数 303
    13.8 工作原理 305
    13.8.1 事实#1:实例变量存储在结构中 305
    13.8.2 事实#2:对象变量实际上是指针 306
    13.8.3 事实#3:方法是函数,而消息表达式是函数调用 306
    13.8.4 事实#4:id类型是通用指针类型 307
    13.9 练习 307
    14 Foundation框架简介 309
    14.1 Foundation文档 309
    15 数字、字符串和集合 313
    15.1 数字对象 313
    15.2 字符串对象 318
    15.2.1 NSLog函数 318
    15.2.2 description方法 319
    15.2.3 可变对象与不可变对象 320
    15.2.4 可变字符串 327
    15.3 数组对象 333
    15.3.1 制作地址簿 337
    15.3.2 数组排序 353
    15.4 词典对象 360
    15.4.1 枚举词典 361
    15.5 集合对象 363
    15.5.1 NSIndexSet 367
    15.6 练习 370
    16 使用文件 373
    16.1 管理文件和目录:NSFileManager 374
    16.1.1 使用NSData类 379
    16.1.2 使用目录 380
    16.1.3 枚举目录中的内容 383
    16.2 使用路径:NSPathUtilities.h 385
    16.2.1 常用的路径处理方法 388
    16.2.2 复制文件和使用NSProcessInfo类 390
    16.3 基本的文件操作:NSFileHandle 394
    16.4 NSURL类 399
    16.5 NSBundle类 400
    16.6 练习 401
    17 内存管理和自动引用计数 403
    17.1 自动垃圾收集 405
    17.2 手工管理内存计数 406
    17.2.1 对象引用和自动释放池 407
    17.3 事件循环和内存分配 409
    17.4 手工内存管理规则的总结 411
    17.5 自动引用计数(ARC) 412
    17.6 强变量 412
    17.7 弱变量 413
    17.8 @autoreleasepool块 415
    17.9 方法名和非ARC编译代码 415
    18 复制对象 417
    18.1 copy和mutableCopy方法 418
    18.2 浅复制与深复制 420
    18.3 实现<NSCopying>协议 422
    18.4 用设值方法和取值方法复制对象 425
    18.5 练习 428
    19 归档 429
    19.1 使用XML属性列表进行归档 429
    19.2 使用NSKeyedArchiver归档 432
    19.3 编码方法和解码方法 433
    19.4 使用NSData创建自定义档案 440
    19.5 使用归档程序复制对象 444
    19.6 练习 445
    20 Cocoa和Cocoa Touch简介 447
    20.1 框架层 447
    20.2 Cocoa Touch 448
    21 编写iOS应用程序 451
    21.1 iOS SDK 451
    21.2 **个iPhone应用程序 451
    21.2.1 创建新的iPhone应用程序项目 454
    21.2.2 输入代码 457
    21.2.3 设计界面 460
    21.3 iPhone分数计算器 466
    21.3.1 启动新的Fraction_Calculator项目 468
    21.3.2 定义视图控制器 468
    21.3.3 Fraction类 474
    21.3.4 处理分数的Calculator类 477
    21.3.5 设计UI 479
    21.4 小结 479
    21.5 练习 481
    附录A 术语表 483
    附录B 地址簿示例源代码 495
    编辑推荐语
    Objective-C 2.0是Mac OS X系统和iPhone平台下的标准程序设计语言。它基于C语言设计而成,是一种面向对象编程语言,功能非常强大,广泛用于OS X以及多种支持gcc编译器的操作系统,如LINUX、UNIX和Windows系统。
    本书是一本权威的Objective-C 2.0参考书,详细介绍该语言的具体内容。本书用丰富而详实的实例讲解了如何使用Objective-C,无需你有任何C语言或面向对象编程语言的经验。在内容上,本书在上一版的基础上进行了更新和扩充,它基于Objective-C2.0。
    本书不仅详细说明了如何充分利用Foundation框架的大量内置类库,还介绍了如何使用iPhone SDK开发基于iPhone和iPod Touch的应用。
    可以通过访问作者的网站http://classroomm.com/objective-c/获取更多的学习资料。
    同类书目**:

    《iOS软件开发揭秘:iPhone&iPad企业应用和游戏开发(第2版)》

    《iPhone
    App开发实战手册》

    《iPhone程序开发基础教程(含DVD光盘1张)》

    《iPhone UIKit详解》

    《软件创富密码:iPhone应用程序开发攻略之深入浅出Objective-C 2.0(双色)适用于iOS4》
    《软件创富密码:iPhone应用程序开发攻略之iPhone特色传感器应用》

    与描述相符

    100

    北京 天津 河北 山西 内蒙古 辽宁 吉林 黑龙江 上海 江苏 浙江 安徽 福建 江西 山东 河南 湖北 湖南 广东 广西 海南 重庆 四川 贵州 云南 西藏 陕西 甘肃 青海 宁夏 新疆 台湾 香港 澳门 海外