Objective-C学习中对 C语言的扩展

移动开发 iOS
Objective-C学习中对 C 的扩展是本文要介绍的内容,Objective-C和Cocoa是苹果公司Mac OS X操作系统的核心。Objective-C语言是C语言的一个扩展集,来看本文内容详解。

Objective-C学习中对 C 的扩展是本文要介绍的内容,Objective-C和Cocoa是苹果公司Mac OS X操作系统的核心。Objective-C语言C语言的一个扩展集,许多具备Mac OS X外观的应用程序都是使用该语言开发的。Cocoa是使用Objective-C编写的工具包,它不仅包含Mac OS X用户界面的所有元素,还包含其他许多内容。

Objective-C文件的扩展名是.m,在Xcode中,.m文件、.c文件(标准C程序)、.cpp(C++程序)文件的编译工作都由GCC(GNU Compiler Collection)处理。

  1. #import 

C语言一样,Objective-C使用头文件来包含元素声明,这些元素包括结构体、符号常量、函数原型等。C语言使用#include语句通知编译器应在头文件中查询定义,而在Objective-C程序中通常会使用#import来实现这个目的。

#import可保证头文件只被包含一次,而不论此命令实际上在那个文件中出现了多少次。在C语言中,程序员通常使用基于#ifdef命令的方案来避免一个文件包含另一个文件,而后者又包含***个文件的情况。而在Objective-C中,程序员使用#import实现这个功能。

  1. #import <Foundation/Foundation.h>  

此语句告诉编译器查看Foundation框架中的Foudation.h头文件。Foudation框架处理的是用户界面之下的层(Layer)中的特性,例如数据结构和通信机制,Objective-C中的大多数程序都以Foundation框架为基础。

  1. NSLog()和@"字符串"   

Cocoa对其所有函数、常量和类型名称都添加了"NS"前缀,这个前缀告诉程序员和编译器函数来自Cocoa而不是其他工具包。两个不同工具包使用相同标识符时会导致名称冲突,而前缀可以预防这个大问题。由于没有集中管理的前缀注册表,所以程序员可以任意选用前缀,许多人使用他们的姓名首字母或公司名称作为前缀。鉴于Cocoa已占用了"NS"前缀,程序员在为自建的变量或函数名称添加前缀时就不应该再用"NS"了,以免发生混乱。

NSLog()这个Cocoa函数和C语言中的printf()很相似,它接受一个字符串作为其***个参数,该字符串可包含格式说明符(如%d),还可以接受匹配格式说明符的其他参数。NSLog()函数和printf()函数的区别在于,前者添加了一些特性,例如时间戳、日期戳和自动附加换行符('\n')等。beauty注:这个特性太有用了,我所有的VC程序中都有自己写的一个函数WriteLog(),完成的是和NSLog()几乎一样的功能。

我们来看下这条NSLog()语句:

  1. NSLog(@"Hello, Objective-C!");   

@符号是Objective-C在标准C语言基础上添加的特性之一。双引号中的字符串前有一个@符号,这表示引用的字符串应该作为Cocoa的NSString元素来处理。

大多数Cocoa元素都以非常直接的方式命名,名称尽量描述出他们可实现的特性。例如,NSArray提供数组,NSDateFormatter帮助程序员用不同方式来格式化日期,NSThread提供多线程变成工具,NSSpeechSynthesizer使用户听到语音。相应的,NSString就是Cocoa中的一串字符。

NSString类型有许多打包的特性,Cocoa在需要字符串时可随时使用它们。下面是一些NSString功能。

(1)告知其长度;

(2)将自身与其他字符串比较;

(3)将自身转换为整型值或浮点值。

还有许多功能是使用C风格字符串无法实现的,以后在使用中会做进一步的说明。

printf()函数中没有和NSString类型相应的格式说明符,因此我们不能将其作为参数传递给printf()函数。而NSLog()函数针对NSString类型添加了%@格式说明符,从而使得NSLog()函数可以接受相应的参数,将其作为NSString使用该字符串中的字符。

如果将C风格的字符串(而不是专门的NSString的@"字符串"元素)传递给NSLog(),编译器会给出警告:

  1. main.m:46: waring: passing arg 1 of `NSLog` from incompatible pointer type  

如果要运行这个程序,他可能会崩溃。要捕捉这样的问题,可以让Xcode总是将警报作为错误来处理。

布尔类型  

C语言拥有布尔数据类型bool,它具有true值和false值。Objective-C提供了相似的类型BOOL,它具有YES值和NO值。这两种不同的布尔类型可以在同一个程序中共存,但在编写Cocoa代码时要使用BOOL。

Objective-C中的BOOL实际上是一种对带符号的字符类型(signed char)的定义(typedef),它使用8位存储空间。YES定义为1,而NO定义为0(使用#define)。Objective-C并不将BOOL作为仅能保存YES值或NO值得真正的布尔类型来处理。编译器将BOOL认作8位二进制数,YES值和NO值只是一种约定。这引发了一个小问题:如果不小心将一个长于1字节的整型值(例如short或int值)赋给一个BOOL变量,那么只有低位字节会用作BOOL值。假设该低位字节刚好为0,BOOL值将会是0,即NO值。

小结:Objective-C学习中对 C语言的扩展的内容介绍完了,希望本文对你有所帮助!

责任编辑:zhaolei 来源: 网络转载
相关推荐

2011-05-11 11:20:26

Objective-C

2011-08-15 17:06:01

Objective-CNSLog

2014-08-05 13:09:34

Objective-C动态特性

2011-08-04 14:58:37

Objective-C Cocoa NSString

2011-05-11 14:06:49

Objective-C

2013-08-21 14:57:42

objective-c问题

2014-04-28 09:56:56

Objective-CiOS命名空间

2011-07-25 10:03:06

Objective-C 委托

2011-08-05 14:03:39

Objective-C 对象 模板

2016-03-30 09:56:07

c语言变量声明objectivec

2014-04-15 11:27:50

C++开发者Objective-C核心语法

2010-11-24 10:35:40

Objective-C

2011-08-18 09:21:17

Objective-C

2011-08-15 17:47:13

Objective-CisMemberOfC

2013-03-27 12:54:00

iOS开发Objective-C

2011-05-11 15:58:34

Objective-C

2013-06-20 10:40:32

Objective-C实现截图

2011-08-16 10:23:04

Objective-CNSAutoreleaXcode常用键

2011-07-06 14:41:34

Objective-C

2011-08-10 18:07:29

Objective-C反射
点赞
收藏

51CTO技术栈公众号