`
xindexinxin
  • 浏览: 5121 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
yax
文章分类
社区版块
存档分类
最新评论

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

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



一、本书特色及评论。
《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、提问—提供解决方法—解释方法。本书还有一个特点就是,首选会提出问题,然后告诉读者怎么做,最后给读者解释为什么要这样做。

二、试读章节理解和笔记总结。
下面是我对这些章节讲述内容的理解。

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

2、objective-c编程
本章首先由一个简单的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

4、类、对象和方法
本章介绍面向对象程序设计的一些关键概念,定义类的机制,以及向实例、对象发送消息的方式。为面向对象程序设计奠定了基础。
首先本章通过举一个生活中的例子,说明什么是对象。
然后介绍了实例和方法。请求一个类或实例来执行某个操作时,就是在向它发送一条消息,消息的接受者称为接受者。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;
}



15、foundation框架简介
本章对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。

21、cocoa和cocoa touch简介
本章对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设备上开发复杂图形应用需要的各种类。


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














分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics