读《Objective-C程序设计(第6版)》有感

本文结构:
一、本书特色及评论。
二、试读章节理解和笔记总结。
1、引言
2、objective-c编程
3、类、对象和方法
14、foundation框架简介
20、cocoa和cocoa touch简介
三、本文总结。


[b][size=large]一、本书特色及评论。[/size][/b]
《Objective-C程序设计(第6版)》是一本很经典、很权威的书籍,这本书已经到了第6版,是学习Objective-C的首选书籍和必备书籍,可以说学习Objective-C,只要看这一本就够了。

本书详细介绍了Objective-C语言,用丰富的示例讲解了怎样使用Objective-C和利用Foundation framework类库。作者很用心,书中截图所使用的开发工具全部采用Xcode 5。本书内容浅显易懂,由浅及深,讲解非常清晰,适合没有编程经验的人自学,是初学者比较容易看懂的书。当然,如果有一定的编程经验,看起来会更快的,不管是java、C、C++还是PHP编程经验,每一种开发语言都是“互通”的,都有一些相似的概念,可以触类旁通。本书章节结构层次清晰,划分合理,很容易知道每一章的主题,插图精美,排版合理,适合课堂教学使用。本书对Objective-C基础语法讲解细致,可以将本书放在身边当工具书查阅。本书适合各个层次的人阅读。

苹果在2014年开发者大会上发布了Swift开发语言。虽然Swift发布了,但是还有必要学Objective-C的,Swift目前还处于Beta版本,Swift语言依然还存在许多Bug,不够稳定。objective-c还是会存在一段时间的。

本书特点:
1、丰富的示例。本书提供了大量的示例代码,方便学习研究。
2、附带练习。章节后面附带了练习,方便读者进行自测,检验学习效果。
3、每章小结。章节中的示例讲解非常详细,每一章中都穿插了示例总结,每一章后都有小结。
3、善于引导读者。本书在给出示例代码时,先让读者预测代码输出结果,然后才给出正确的输出结果,这样一步步引导读者思考,循循善诱,增强了互动性。
4、提问—提供解决方法—解释方法。本书还有一个特点就是,首选会提出问题,然后告诉读者怎么做,最后给读者解释为什么要这样做。

[size=large][b]二、试读章节理解和笔记总结。[/b][/size]
下面是我对这些章节讲述内容的理解。

[b]1、引言[/b]
引言部分对objective-c的发展历史进行了介绍,并且介绍了本书的组织方式。
全书共分为三部分,总共21章。第一部分介绍了Objective-C的基础知识。第二部分介绍了怎样使用Foundation框架。第三部分介绍了Cocoa和Cocoa Touch框架,以及使用iOS SDK开发APP应用程序。

[b]2、objective-c编程[/b]
本章首先由一个简单的objective-c程序引入,由此引人入胜,然后使用Xcode和GNU Objective-C两种方式编译运行程序,输出“Programming is fun”。
随后介绍了Xcode工具和Terminal工具的使用,使用Xcode可以输入、编译、调试和执行程序。
本章介绍了常见文件扩展名。

本章列出了5个例子,对NSLog输出进行了详细介绍。
为了加强动手能力,我对本章的5个例子全都进行了实际编译和运行,用虚拟机安装的Mac OS X 10.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-11 00:37:13.419 prog1[784:303] Testing...
2014-09-11 00:37:13.421 prog1[784:303] ....1
2014-09-11 00:37:13.422 prog1[784:303] ...2
2014-09-11 00:37:13.422 prog1[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-11 00:59:38.052 prog1[825:303] The result is 95

[size=large][b]4、类、对象和方法[/b][/size]
本章介绍面向对象程序设计的一些关键概念,定义类的机制,以及向实例、对象发送消息的方式。为面向对象程序设计奠定了基础。
首先本章通过举一个生活中的例子,说明什么是对象。
然后介绍了实例和方法。请求一个类或实例来执行某个操作时,就是在向它发送一条消息,消息的接受者称为接受者。Objective-C调用执行某个方法的格式:
[ ClassOrInstance method];

例子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 = [Fraction alloc]; //创建实例
myFraction = [myFraction init]; //初始化
也可以组合在一起:
myFraction = [[Fraction alloc] init];

Fraction *myFraction = [Fraction new];

例子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
[computer start];
[computer shut];
[computer logOff ];
[computer restart];
[computer lock];

练习4
对汽车、摩托车、船执行的操作,有重复。
[yourCar prep];
[yourCar drive];
[yourCar getGas];
[yourCar service];

练习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;
}



[b]15、foundation框架简介[/b]
本章对foundation框架进行了介绍,并且介绍了如何使用本地帮助文档和在线帮助文档,以及如何查看某个类的提示信息。
框架是由许多类、方法、函数和文档组织的集合。
Cocoa包括Foundation框架、Application Kit框架、Core Data第三方框架。
Cocoa Touch包括Foundation、Core Data、UIKit框架。
Application Kit框架用来开发交互式图形应用程序。可以开发文本、菜单、工具栏、表、文档、剪贴板、窗口等。
Foundation框架可以使用基本对象数字、字符串,对象集合数组、字典、集合,日期时间、自动化内存管理、处理基础文件系统、存储对象、处理几何数据结构等。
打开本地帮助文档:Help-->Documentation and API Reference。
查看某个类的提示信息,将光标放到该类上,按住Option键。
一直打开帮助面板,菜单View-->Utilities-->Show Quick Help Inspector。
在线访问MAC OS X帮助文档,http://developer.apple.com/library/mac/navigation/index.html。

[b]21、cocoa和cocoa touch简介[/b]
本章对cocoa和cocoa touch进行了概念介绍,并且用示意图说明了各个框架之间的关系。
Application应用服务层支持打印和图形渲染的,包括Quartz、OpenGL、Quicktime。
Cocoa层包括Foundation框架、Application Kit框架、Core Data第三方框架。
Foundation框架:提供处理集合、字符串、内存管理、文件系统、存档等相关类。
Application Kit(AppKit)框架:提供管理视图,窗口、文档、按钮、列表等相关类。
Core Data第三方框架:使用数据库存储和管理数据。
Cocoa Touch包括Foundation、Core Data、UIKit框架。
UIKit框架:相当于AppKit,提供窗口、视图、按钮、文本域等相关类,提供支持使用陀螺仪、加速器的类和触摸式界面。
Cocoa框架用于Mac OS X桌面应用程序的开发。Cocoa Touch框架用于IOS设备上应用程序开发。cocoa和cocoa touch提供了在Mac和IOS设备上开发复杂图形应用需要的各种类。


[size=large][b]四、本文总结。[/b][/size]
试读提供了五个章节,既然是试读,就要真正的读,所以我将样章从头到尾,一字不落的看完了。我在虚拟机下安装了MAC OS X,在Xcode中把样章中所有例子都运行了一遍,将样章后的练习都做了一遍。通过对样章试读,感觉收获不少。
全文字数达到了两三千字,耗时两天时间完成,希望可以获奖。^_^
http://xindexinxin.iteye.com/blog/2115981


[img]http://dl2.iteye.com/upload/attachment/0101/0923/8d228f26-1c48-3100-af59-edb729eada9d.png[/img]

[img]http://dl2.iteye.com/upload/attachment/0101/0925/4f230996-03b6-31c5-9fa7-78d0ddcffb1c.png[/img]

[img]http://dl2.iteye.com/upload/attachment/0101/0927/5af13442-95e7-3160-ae06-b7ff48979732.png[/img]

[img]http://dl2.iteye.com/upload/attachment/0101/0929/42cb5b21-f39a-387f-8306-afb62689a59e.png[/img]

[img]http://dl2.iteye.com/upload/attachment/0101/0931/37ea53a7-9cd0-308b-b886-6738fa16e143.png[/img]

[img]http://dl2.iteye.com/upload/attachment/0101/0933/9dfede55-789b-33ee-b0b0-011290fe8342.png[/img]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值