一、什么是Objective-C
Objective-C是C语言的一个扩展集,几乎所有的OS X或IOS平台上的应用程序都是用该语言开发的。由于是对C的扩展,因此本篇以及之后的所有Objective-C相关的文章都将重点介绍Objective-C在C上添加的新特性,那么C的基础此处将不再赘述。
二、简单的Objective-C程序
#import <Foundation/Foundation.h>
int main(int argc, const char* argv[])
{
NSLog(@"hello, Objective-C!!!");
return (0);
}//main
如果你了解C,那么你应该会很熟悉上面的两行代码。请记住Objective-C本质就是C,因此其用来声明main()和返回数值的语法与C是一样滴。细心的话会发现代码中其实和C代码还是有些细微的差别的。就比如这个陌生的#import是什么?下面将将会一一分析这些不同的地方。
#import语句
其实很容易理解,就和我们的C一样的,C中我们用#include来包含头文件,通知编译器查询头文件中相应的定义代码。那么在Objective-C中我们则使用#import来达到同样的目的(虽然在Objective-C中也可以使用#include,但是一般不建议这么做,因为#import是由Xcode使用的编译器提供的,而我们用Objective-C开发一般都是在Xcode中进行编写代码)。#import可保证头文件只被包含一次,无论此命令在该文件中出现了多少次。
补充:在C中,程序员通常会使用#ifdef命令来避免一个文件包含了另一个 文件而另一个文件又包含了前者的情况。而在Objective-C中,程序员使用#import即可解决上述问题。
那么代码中的#import <Foundation/Foundation.h>意思是,告诉编译器查找Foundation框架中的Foundation.h头文件。
那么紧接着就会带来一个新的问题,什么是框架?
框架
框架就是一种把头文件、库、图片、声音等内容聚合在一个独立的单元中的集合体。而Foundation框架处理的是用户界面之下的那些层的特性,比如数据结构和通信机制。本篇以及之后的所有Objective-C相关的文章都以Foundation框架为基础。
每一个框架都是一个重要的技术集合。并且每个框架都有一个主头文件,其包含了框架内所有的头文件。那么我们就可以仅在代码中#import主头文件,那么就可以使用框架内的所有功能。
就Foundation框架来说其头文件用了近1MB的磁盘存储空间,包含了近14000行代码以及涵盖了100多个文件。但是如果你担心读取每个文件的文本会消耗编辑器大量的时间,那么你就错了。Xcode非常聪明:它使用预编译头文件的方式(一种经过压缩的、摘要形式的头文件),来避免这种问题的产生,从而加快读取速度,以至于加载文件的速度会非常的快。
刚才我们简单的介绍了一下什么是框架。我相信大家最大的疑惑是NSLog()以及@“hello, Objective-C!!!”。接下来,我将会分别介绍这两个新的知识。
NSLog()
NSLog()的作用和C中的printf()作用非常相似:可向控制台输出一些内容。并且与printf()一样,NSLog()接受一个字符串作为其第一个参数,该字符串可以包含格式说明符(如:%d),此函数会接受与格式说明符相匹配的其他参数。注意: 虽然前面说过Objective-C是在C的基础上添加了新的特性,因此你可以用printf()来代替NSLog()函数。但是还是建议使用NSLog(),毕竟其添加了一些新的特性,比如:时间戳、日期戳和自动附加换行符等。
补充:你可能会疑惑NSLog()命名方式有些奇怪。这个NS到底是什么意思?实际上该函数来自于cocoa工具包,cocoa给其所有的函数、常量和类型名称都添加了NS前缀。简单来说,这个前缀就是为了告诉我们这个函数来自cocoa而不是其他工具包。
若你想更深入了解其原因,那么请参阅Objective-C基础教程(第二版)12页内容。
@“hello, Objective-C!!!”
也许你会疑惑字符串前面为什么会出现@符号,是排版错误吗?其实不然,如果引号前有@符号,那么意味着引号内的字符串应作为cocoa的NSString的元素来处理。
那么什么是NSString呢?去掉NS之后会发现就是String,相信你已经猜到了
NSString就是cocoa中的字符串。NSString集成了大量的特性,其还有雨多C风格的字符串无可比拟的功能。关于NSString的详细介绍会在后面的文章中介绍到。
本文是我在学习的过程中编写的,如果有错误的地方希望大家指出,谢谢!!!