Cocoa数字类型

mnbvcxz 2011-06-10

3.3.7   Cocoa数字类型

本节中的类型不是Objective-C语言的一部分。它们都定义于Cocoa框架中,但是,我们会看到它们经常在这里提及。从Mac OS X 10.5开始,Apple已经使用定义的类型替代了Cocoa框架中int和float的大多数出现,而定义的类型的长度取决于代码是编译为32位可执行程序还是64位可执行程序(参见附录C)。

NSInteger

NSInteger替代了Cocoa框架中大多数int的出现。它在32位环境中定义为int,在64位环境中定义为long(64位整数)。

NSUInteger

NSUInteger是NSInteger的无符号形式。它替代了Cocoa框架中的大多数unsigned的出现。在32位环境中,它是一个无符号的32位整数;在64位环境中,它是一个无符号的long(无符号的64位整数)。

CGFloat

CGFloat替代了float。当针对32位环境编译的时候,它是一个float(32位);当针对64位环境编译的时候,它是一个double(64位)。Foundation框架提供了一个定义的常量,CGFLOAT_IS_DOUBLE,如果需要通过编程知道CGFloat在当前的环境中是一个float还是一个double,使用下面的语句:

if ( CGFLOAT_IS_DOUBLE )  


  NSLog( @"Double !\n");  


else  


  NSLog(@"Float !\n"); 

NSLog

NSLog是Foundation框架中定义的一个用于字符输出的函数。NSLog不是Objective-C语言自身的一部分,但是,这里介绍它,是因为它用于本书中的很多示例和练习中。

NSLog类似于printf,但是有如下一些区别:

NSLog写入控制台日志,也写入一个终端窗口。控制台日志是操作系统负责维护的一个消息日志。在OS X上,可以使用Console应用程序(/Applications/Utilities/ Console.app)来查看控制台日志。

NSLog的格式字符串是一个NSString直接量,而不是一个C字符串直接量。

NSLog在打印后自动换到一个新行。不需要在格式字符串末尾添加一个额外的\n。

NSLog使用一个额外的转换修饰符,%@,它接受一个Objective-C对象作为其参数。在转换中,NSLog调用参数对象的description方法。该description方法返回一个NSString,用以描述该对象。返回的NSString替代了输出中的%@,如下面的例子所示:

NSString *aString =  @"Hello New York!";  


 


NSLog( @"The object description is: %@", aString ); 

NSString的描述只是字符串本身。执行以上代码,将会产生如下的输出:

The object description is: Hello New York! 

当创建自己的类时,可以覆盖description方法为自己的类提供定制的描述。

注意   如果使用带有%@描述符的格式字符串,但是,忘记了提供一个对应的对象参数,那么NSLog将尝试向位于对象参数所应该放置的地址的字节发送一条description消息。这通常会导致程序崩溃。

在一个发布的程序中,不应该使用NSLog语句(这么做会在客户的控制台日志中产生杂乱信息),但是,对于在学习和调试过程的简单输出来说,它很有用。

NSLog有一项功能可能很恼人,它在你要求其输出的内容前面加了一个长长的字符串信息,其中包括执行该语句的时间和日期(详细到毫秒)、可执行程序的名称,以及执行它的程序的进程id。如下的NSLog语句:

NSLog( @"Greetings from NSLog" ); 

将产生如下的输出:

2010-02-01 11:41:26.556 a.out[33955:903] Greetings from NSLog 

为了显示上的清晰,在本书后面的部分中,在显示NSLog的输出时,我们去除了额外的信息。

转自:   http://book.51cto.com/art/201102/245615.htm

相关推荐

最美应用有价值的好应用 / 0评论 2018-02-01