读《Objective-C程序设计(第6版)》有感
本文结构:
一、本书特色及评论。
二、试读章节理解和笔记总结。
1、引言
2、objective-c编程
3、类、对象和方法
14、foundation框架简介
20、cocoa和cocoatouch简介
三、本文总结。
一、本书特色及评论。
《Objective-C程序设计(第6版)》是一本很经典、很权威的书籍,这本书已经到了第6版,是学习Objective-C的首选书籍和必备书籍,可以说学习Objective-C,只要看这一本就够了。
本书详细介绍了Objective-C语言,用丰富的示例讲解了怎样使用Objective-C和利用Foundationframework类库。作者很用心,书中截图所使用的开发工具全部采用Xcode5。本书内容浅显易懂,由浅及深,讲解非常清晰,适合没有编程经验的人自学,是初学者比较容易看懂的书。当然,如果有一定的编程经验,看起来会更快的,不管是java、C、C++还是PHP编程经验,每一种开发语言都是“互通”的,都有一些相似的概念,可以触类旁通。本书章节结构层次清晰,划分合理,很容易知道每一章的主题,插图精美,排版合理,适合课堂教学使用。本书对Objective-C基础语法讲解细致,可以将本书放在身边当工具书查阅。本书适合各个层次的人阅读。
苹果在2014年开发者大会上发布了Swift开发语言。虽然Swift发布了,但是还有必要学Objective-C的,Swift目前还处于Beta版本,Swift语言依然还存在许多Bug,不够稳定。objective-c还是会存在一段时间的。
本书特点:
1、丰富的示例。本书提供了大量的示例代码,方便学习研究。
2、附带练习。章节后面附带了练习,方便读者进行自测,检验学习效果。
3、每章小结。章节中的示例讲解非常详细,每一章中都穿插了示例总结,每一章后都有小结。
3、善于引导读者。本书在给出示例代码时,先让读者预测代码输出结果,然后才给出正确的输出结果,这样一步步引导读者思考,循循善诱,增强了互动性。
4、提问—提供解决方法—解释方法。本书还有一个特点就是,首选会提出问题,然后告诉读者怎么做,最后给读者解释为什么要这样做。
二、试读章节理解和笔记总结。
下面是我对这些章节讲述内容的理解。
1、引言
引言部分对objective-c的发展历史进行了介绍,并且介绍了本书的组织方式。
全书共分为三部分,总共21章。第一部分介绍了Objective-C的基础知识。第二部分介绍了怎样使用Foundation框架。第三部分介绍了Cocoa和CocoaTouch框架,以及使用iOSSDK开发APP应用程序。
2、objective-c编程
本章首先由一个简单的objective-c程序引入,由此引人入胜,然后使用Xcode和GNUObjective-C两种方式编译运行程序,输出“Programmingisfun”。
随后介绍了Xcode工具和Terminal工具的使用,使用Xcode可以输入、编译、调试和执行程序。
本章介绍了常见文件扩展名。
本章列出了5个例子,对NSLog输出进行了详细介绍。
为了加强动手能力,我对本章的5个例子全都进行了实际编译和运行,用虚拟机安装的MacOSX10.9。
下面是5个例子的代码:
例1、
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... NSLog(@"Programming is fun!"); } return 0; }
例2、
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... NSLog(@"Programming is fun!"); NSLog (@"Programming in Objective-C is even more fun!"); } return 0; }
例3、
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... NSLog (@"Testing...\n..1\n...2\n....3"); } return 0; }
例4、
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... int sum; sum = 50 + 25; NSLog (@"The sum of 50 and 25 is %i", sum); } return 0; }
例5、
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... int value1, value2, sum; value1 = 50; value2 = 25; sum = value1 + value2; NSLog (@"The sum of %i and %i is %i", value1, value2, sum); } return 0; }
为了理解本章的概念,我将本章后面的练习全部做了。
下面是我本章练习的答案:
练习2、
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... NSLog (@"In Objective-C, lowercase letters are significant."); NSLog (@"main is where program execution begins."); NSLog (@"Open and closed braces enclose program statements in a routine."); NSLog (@"All program statements must be terminated by a semicolon."); } return 0; }
练习3、
2014-09-1100:37:13.419prog1[784:303]Testing...
2014-09-1100:37:13.421prog1[784:303]....1
2014-09-1100:37:13.422prog1[784:303]...2
2014-09-1100:37:13.422prog1[784:303]..3
练习4、
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... int value1, value2, result; value1 = 87; value2 = 15; result = value1 - value2; NSLog (@"The result of %i minus %i is %i", value1, value2, result); } return 0; }
练习5、
#import <Foundation/Foundation.h> int main (int argc, const char *argv[]) { @autoreleasepool { int sum; /* COMPUTE RESULT*/ sum = 25 + 37 - 19; // DISPLAY RESULTS NSLog (@"The answer is %i", sum); } return 0; }
第2行,末尾多了个分号“;”。
第3行,"("应为"{"。
第5行,"INT"应为"int"。
第6行,多行注释"/*"没有结束符号"*/"。
第8行,单行注释"/"应为"//"。
第9行,单引号''应为双引号"",参数sum前面少个“,”。
练习6、
2014-09-1100:59:38.052prog1[825:303]Theresultis95
4、类、对象和方法
本章介绍面向对象程序设计的一些关键概念,定义类的机制,以及向实例、对象发送消息的方式。为面向对象程序设计奠定了基础。
首先本章通过举一个生活中的例子,说明什么是对象。
然后介绍了实例和方法。请求一个类或实例来执行某个操作时,就是在向它发送一条消息,消息的接受者称为接受者。Objective-C调用执行某个方法的格式:
[ClassOrInstancemethod];
例子1
以面向过程的编程方式输出分数。
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { // insert code here... int numerator = 1; int denominator = 3; NSLog (@"The fraction is %i/%i", numerator, denominator); } return 0; }
例子2
以面向对象的编程方式输出分数。主要分为三部分,@interface部分、@implementation部分、program部分。
#import <Foundation/Foundation.h> //@interface部分 @interface Fraction: NSObject -(void) print; -(void) setNumerator: (int) n; -(void) setDenominator: (int) d; @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; } @end //program部分 int main (int argc, char * argv[]) { @autoreleasepool { Fraction *myFraction; //创建一个分数实例 myFraction = [Fraction alloc]; myFraction = [myFraction init]; //设置粉色为1/3 [myFraction setNumerator: 1]; [myFraction setDenominator: 3]; //使用打印方法显示分数 NSLog (@"The value of myFraction is:"); [myFraction print]; } return 0; }
@interface部分用于描述类和类的方法。
@implementation用于描述数据,类对象的示例变量存储的数据,实现接口中声明的方法。
program部分的程序代码实现了程序的预期目的。
随后本章对这三部分进行了详细讲解。
本章对类名和变量命名规则进行了讲解。
类名一般以大写字母开头。
实例变量、对象、方法的名称一般以小写字母开头,名称中以大写字母表示新单词的开头(骆驼命名法)。
制定名称的规则:名称必须以字母或下划线"_"开头,后面可以是大小写字母、下划线、0~9之间的数字组合。
保留字(保留名)不能作为变量名。Objective-C区分大小写字母。
本章对类方法和实例方法进行了讲解。
声明一个方法:
-(void)setNumerator:(int)n;
开头的负号“-”表示这个方法是实例方法,“+”表示类方法。
类方法是对类本身执行某些操作的方法,例如创建类的新实例。
实例方法对类的实例执行一些操作,例如设置值、检索值、显示值。
方法的返回值放在负号或正号的圆括号中,void表示无返回,int表示返回整型,double表示返回双精度。
方法名冒号后面是参数。
创建一个实例、初始化。
Fraction*myFraction;
myFraction=[Fractionalloc];//创建实例
myFraction=[myFractioninit];//初始化
也可以组合在一起:
myFraction=[[Fractionalloc]init];
或
Fraction*myFraction=[Fractionnew];
例子3
以面向对象的编程方式输出两个分数。
#import <Foundation/Foundation.h> //@interface部分 @interface Fraction: NSObject -(void) print; -(void) setNumerator: (int) n; -(void) setDenominator: (int) d; @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; } @end //program部分 int main (int argc, char *argv[]) { @autoreleasepool { Fraction *frac1 = [[Fraction alloc] init]; Fraction *frac2 = [[Fraction alloc] init]; //设置第一个分数为2/3 [frac1 setNumerator: 2]; [frac1 setDenominator: 3]; //设置第二个分数为3/7 [frac2 setNumerator: 3]; [frac2 setDenominator: 7]; //显示分数 NSLog (@"First fraction is:"); [frac1 print]; NSLog (@"Second fraction is:"); [frac2 print]; } return 0; }
例子4
演示了实例变量的访问和数据封装。介绍了设值方法(setter)和取值方法(getter)的概念。
本例以setter和getter的方式设置分数、输出分数。
取值方法和设值方法称为访问器方法。
#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; }
为了理解本章的概念,我将本章后面的练习全部做了。
下面是我本章练习的答案:
练习1
6_05不合法,不能以数字开头
A$不合法,中间有空格
练习2
图
练习3
[computerstart];
[computershut];
[computerlogOff];
[computerrestart];
[computerlock];
练习4
对汽车、摩托车、船执行的操作,有重复。
[yourCarprep];
[yourCardrive];
[yourCargetGas];
[yourCarservice];
练习5
发送不同消息,执行不同操作方法。
练习6
面向对象编程和面向过程编程的优缺点......
练习7
XYpoint类:
#import <Foundation/Foundation.h> //@interface部分 @interface XYpoint: NSObject -(void) print; -(void) setXPosition: (int) x; -(void) setYPosition: (int) y; -(int) XPosition; -(int) YPosition; @end //@implementation部分 @implementation XYpoint { int xPosition; //X坐标 int yPosition; //y坐标 } -(void) print { NSLog (@"%i/%i", xPosition, yPosition); } -(void) setXPosition: (int) x { xPosition = x; } -(void) setYPosition: (int) y { yPosition = y; } -(int) XPosition { return xPosition; } -(int) YPosition { return yPosition; } @end //program部分 int main (int argc, char *argv[]) { @autoreleasepool { XYpoint *myXYpoint = [[XYpoint alloc] init]; //设置x、y坐标 [myXYpoint setXPosition: 9]; [myXYpoint setYPosition: 12]; //检索输出x、y坐标 NSLog (@"The Position is: (x=%i, y=%i)", [myXYpoint XPosition], [myXYpoint YPosition]); } return 0; }
15、foundation框架简介
本章对foundation框架进行了介绍,并且介绍了如何使用本地帮助文档和在线帮助文档,以及如何查看某个类的提示信息。
框架是由许多类、方法、函数和文档组织的集合。
Cocoa包括Foundation框架、ApplicationKit框架、CoreData第三方框架。
CocoaTouch包括Foundation、CoreData、UIKit框架。
ApplicationKit框架用来开发交互式图形应用程序。可以开发文本、菜单、工具栏、表、文档、剪贴板、窗口等。
Foundation框架可以使用基本对象数字、字符串,对象集合数组、字典、集合,日期时间、自动化内存管理、处理基础文件系统、存储对象、处理几何数据结构等。
打开本地帮助文档:Help-->DocumentationandAPIReference。
查看某个类的提示信息,将光标放到该类上,按住Option键。
一直打开帮助面板,菜单View-->Utilities-->ShowQuickHelpInspector。
在线访问MACOSX帮助文档,http://developer.apple.com/library/mac/navigation/index.html。
21、cocoa和cocoatouch简介
本章对cocoa和cocoatouch进行了概念介绍,并且用示意图说明了各个框架之间的关系。
Application应用服务层支持打印和图形渲染的,包括Quartz、OpenGL、Quicktime。
Cocoa层包括Foundation框架、ApplicationKit框架、CoreData第三方框架。
Foundation框架:提供处理集合、字符串、内存管理、文件系统、存档等相关类。
ApplicationKit(AppKit)框架:提供管理视图,窗口、文档、按钮、列表等相关类。
CoreData第三方框架:使用数据库存储和管理数据。
CocoaTouch包括Foundation、CoreData、UIKit框架。
UIKit框架:相当于AppKit,提供窗口、视图、按钮、文本域等相关类,提供支持使用陀螺仪、加速器的类和触摸式界面。
Cocoa框架用于MacOSX桌面应用程序的开发。CocoaTouch框架用于IOS设备上应用程序开发。cocoa和cocoatouch提供了在Mac和IOS设备上开发复杂图形应用需要的各种类。
四、本文总结。
试读提供了五个章节,既然是试读,就要真正的读,所以我将样章从头到尾,一字不落的看完了。我在虚拟机下安装了MACOSX,在Xcode中把样章中所有例子都运行了一遍,将样章后的练习都做了一遍。通过对样章试读,感觉收获不少。
全文字数达到了两三千字,耗时两天时间完成,希望可以获奖。^_^