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

84407518 2014-09-12

本文结构:

一、本书特色及评论。

二、试读章节理解和笔记总结。

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中把样章中所有例子都运行了一遍,将样章后的练习都做了一遍。通过对样章试读,感觉收获不少。

全文字数达到了两三千字,耗时两天时间完成,希望可以获奖。^_^

相关推荐