15.2 字符串对象

前面在程序中已经遇到过字符串,只要使用一对双引号括住一组字符串时,如下所示@“Programming is fun”就是使用Objective-C语言创建了一个字符串。Foundation框架支持一个名为NSString的类,它用于处理字符串对象。然而C-string由char字符组成,NSString对象是由unichar字符组成。Unichar字符是符合Unicode标准的多字节字符。这样,就可以处理包含数百万字符的字符集。幸运的是,不必担心字符串的内部表示,因为NSString类[1]已经自动地做了这些工作。使用该类的方法,可以更容易地开发能够本地化的应用程序,即,使其能够在全世界不同语言环境下使用。

要使用Objective-C语言创建一个常字符串对象,需要在字符串开头放置一个@字符,于是,表达式


@“Programming is fun”


创建了一个常量字符串对象。在特殊情况下,它是属于NSConstantString类的常量字符串对象。NSConstantString类是字符串对象NSString类的子类。在你的程序中使用字符串对象,要包括下面的一行:


import<Foundation/NSString.h>

15.2.1 NSLog函数

随后的代码清单15-2,展示了如何定义NSString对象,并向其指派一个初始化值。还展示了如何使用格式字符%@来显示NSString对象。

代码清单15-2


import<Foundation/NSObject.h>

import<Foundation/NSString.h>

import<Foundation/NSAutoreleasePool.h>

int main(int argc, char*argv[])

{

NSAutoreleasePool*pool=[[NSAutoreleasePool alloc]init];

NSString*str=@“Programming is fun”;

NSLog(@,str);

[pool drain];

return 0;

}


代码清单15-2输出


Programming is fun


在以下代码行中


NSString*str=@“Programming is fun”;


常量字符串对象Programming is fun被赋值给NSString变量str。然后使用NSLog来显示它的值。

NSLog格式字符%@不仅能显示NSString对象,而且可以显示其他对象。例如,给定以下语句:


NSNumber*intNumber=[NSNumber numberWithInteger:100];


NSLog调用


NSLog(@,intNumber);


将产生如下输出:


100


格式字符%@甚至能够显示数组、字典和集合的全部内容。事实上,通过重载你的类所继承的方法,还可使用这些格式字符显示你自己的类对象。如果不重载方法,NSLog仅仅显示类名和该对象在内存中的地址(那是从NSObject类继承的description方法的默认实现)。

[1]目前,unichar字符占用16位,而Unicode标准提供的大小大于16位。因此,将来,unichar字符可能大于16位,底线是绝对不要对Unicode字符的大小作任何假定。