《iPhone应用程序开发指南(基础篇)》第三章 3.3

版权所有:AisideChina

本博客将在今后陆续进行本书的连载,敬请关注!
更多内容请大家购买正版《iPhone应用程序开发指南(基础篇)》

 

3.3             解析Note

文件类型

        首先来看一下打开文件的名称:Note.m。在Objective-C中,扩展名为.m的文件,与C++语言中扩展名为.cpp的文件相同,均是程序的源文件。而程序的头文件与C++语言中的头文件一样,扩展名同样是.h。

引入头文件

        1处的#import <Foundation/Foundation.h>表示程序在此处要引用Foudation框架中的Foundation.h头文件。

        Objective-C中的“#import”语句同C++中的“#include”语句类似,表示头文件的引入。但是还记得在C/C++中是如何避免同一个头文件被引入两次的吗?是在文件的一开始使用#ifdef命令来判断一个头文件是否已被加载过了。然而使用“#import”的时候就无需如此,使用“#import”引入一个头文件时,无论在同一个地方导入同一个头文件几次,都可保证该文件只被包含一次。 

Tips:

所谓框架,就是一个集合,其中包含着头文件、库以及图像和声音等资源文件。每个框架中均有一个主头文件,该主头文件包含了框架中的各个头文件,一旦引入了主头文件,就可以在自己的程序里使用任何在该框架里声明的类。
 

        #import <Foundation/Foundation.h>表示要引入的文件是Foudation框架中的主头文件Foundation.h。这样,我们就可以使用所有Foudation框架中的类了,比如NSAutoreleasePool就是Foudation框架中的一个类。

程序的入口——main方法

        在 2处看到int main(int argc, const char * argv[ ])和下面的return 0,跟C语言中的main函数一样,这里表示该应用程序的入口。

创建自动释放池对象

        在3 处的NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init],声明并初始化了一个可以用于自动释放对象的缓冲池,在此以C++的语法形式将它拆分来表现一下,理解起来可能就容易一些了:

(1)      NSAutoreleasePool * pool:同在C++中一样,这里表示声明了一个NSAutoreleasePool类型的指针,并命名为pool。NSAutoreleasePool类型用于构建一个缓冲池来存放各种对象和变量,缓冲池是用于进行内存管理的。关于内存管理方面,在iPhone开发中可以说是非常重要且较为复杂,所以为使你可以系统牢固的掌握,内存管理的知识将放在后面进行详细的讲解。在这里只需知道,为了程序的正常运行,pool申请了一块公用的内存。

(2)      [[NSAutoreleasePool alloc] init]:其中[NSAutoreleasePool alloc]可以理解为在C++中的NSAutoreleasePool:alloc()形式。

        alloc在这里,就是一个用于建立指定对象(也就是这里的pool)的方法,它负责为该对象分配内存,并返回该对象的指针。但为指定对象开辟的内存中并无任何数据。那么下面紧跟的init相信你应该很容易的理解了——为开辟了内存的对象调用初始化函数来进行初始化。这两句结合起来就相当于C++中的new运算符。

        对上面代码中的中括号“[ ]”是不是有些奇怪?如在表3-1中所见的[对象  方法名:参数A  方法名:参数B  …],用一对中括号“[]”将对象与要调用的方法括起来,并在中间用空格隔开,便是Objective-C中调用方法的形式。而且在Objective-C的方法中,方法所需要的参数可以放在函数名的任何位置,使用“:”来表示要插入参数的位置,紧跟在“:”之后添加需要的参数。正如上面所示:“方法名:参数A  方法名:参数B”。

(3)      [pool drain]:销毁缓冲池及其中的内容,并释放内存。

   创建NSString类型对象——我们的记录

        4处的NSString *note1 = [NSString stringWithString:@"Running at 6 o’Clock"]与NSString *note2 = [NSString stringWithString:@"Eating at 7 o’Clock"],同前面的NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]一样用于创建对象,只是在这里,使用了NSString的stringWithString:方法创建了两个NSString类型的指针note1与note2。这样程序便不再是单纯的输出“Hello World”了,它将可以使用这两个NSString类型的对象来记录我们自己的事情。

        NSString类型相当于C++中的String类型,它是Foudation框架中的一个用于处理字符串的类型,其中提供了很多用于字符串处理的方法,其相关内容将在后面进行详细的讲解。

NSLog输出

        下面就来讲解一下在本程序中5处的用于向控制台输出记录的两句代码:NSLog(@”%@”, note1)与NSLog(@”%@”, note2)。NSLog 相当于C++中的printf方法,在这里通过NSLog方法向控制台输出了note1与note2对象中所包含的信息。现在就来仔细分析一下这两条语句.

Tips: 

NSLog中的NS是NextSTEP的缩写,它表示这个函数是来自Cocoa工具包的。Cocoa对其所有函数、常量和类型的名称均添加了NS前缀. 
 

(1)    NSLog第一个参数是@”%@”,在Objective-C中,@”sometext”的形式,就表示要把引号内的字符串(如sometext)当作一个NSString类的对象来进行处理。该字符串同printf中的一样,可以接受格式说明符,如%d等,用来表示在此处要插入一个整数类型(或者其他格式说明符对应的类型)的数值,并需要在该函数的后续参数中提供具体的相应数值。最后,NSLog将会在控制台中输出该字符串。

(2)      在程序要输出的字符串中,使用了类型说明符“%@”:表示在此处输出一个对象的描述,但是如何输出一个对象的描述呢?在Objective-C中,每个对象都有-(NSString*)description方法,在使用“%@”类型说明符来输出某种类型的对象时,就会调用这个方法,并在“%@”的对应位置输出-(NSString *)description方法的返回值。如果需要某类型的对象按照自己的意图进行输出,就需要重写-(NSString *)description方法。但事实上,如果今后使用“%@”类型说明符的话,大多数情况应该是需要输出一个NSString类型的对象,即一个字符串,NSString的-(NSString *)description方法将会输出这个字符串对象本身所包含的内容。

(3)      在今后开发过程中,会经常使用到需要格式化的字符串,所以现在总结几种常用的格式说明符如表3-2中所示。

表3-2 类型说明符  

 类型说明符代表类型
%@对象
%s字符型
%d整型
%u无符号整型
%f浮点类型

 

        上面讲解了一些关于Objective-C与C/C++的差异。但因为Objective-C是C的一个超集,所以在C中声明变量的关键字、控制程序的分支循环结构、运算符等,在Objective-C中也同样适用,比如用int声明整数类型,float声明浮点类型,使用for语句来进行固定次数的循环,用if/else语句来进行条件选择等。

        下面是一段与C/C++无异的小程序,可放在Objective-C程序中顺利运行,并将成功在控制台输出数字0到9:

==================================================

代码3.3  Objective-C基本语法示例

int i = 0;

for(i = 0 ;i<10; i++){

                  NSLog(@”%d”, i);

}

================================================

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值