Objective-C和Sprite Kit游戏开发从入门到精通
上QQ阅读APP看书,第一时间看更新

1.3 第一个Objective-C程序

接下来,我们继续使用SimpleOC项目,在导航栏中,单击main.m文件,如图1-7所示(已关闭右栏)。

图1-7 命令行项目中的main.m文件

如果不小心按了键盘上的Command+R键,或者是单击了工具栏中的小三角图标,你会发现,在界面的下方会显示一条信息,如图1-8所示。

图1-8 命令行执行结果

我们看到,输出窗口显示了一条“Hello World”信息,只是把名字叫错了,我可不叫“World”。好的,我们将代码中的“World”修改为自己的名字,这样,Xcode就真的是好像在给我们打招呼了,如下面的代码。

    NSLog(@"Hello, 你的名字!");

接下来,我们看看这些各种颜色的代码都是什么情况(它们有点像航空母舰上的舰员,根据不同的颜色来区分工作岗位)。

首先是绿色的内容,它们只是说明性的文字,称为注释。本例中,它们都是以“//”开始的行,删除它们不会对运行结果有任何影响,说干就干,下面就是去掉了绿色内容以后的代码。

    #import <Foundation/Foundation.h>
    int main(int argc, const char * argv[])
    {
        @autoreleasepool {
            NSLog(@"Hello, World! ");
        }
        return 0;
    }

这些代码就是程序执行相关的内容,我们快速了解一下它们的功能。

第一行代码是以“#”符号开头的,它称作预处理指令,#import指令用于导入当前代码文件中所需要使用的资源。一般情况下,我们会导入头文件(.h文件),这和C或C++代码中使用的#include指令的功能是相同的。

在导入头文件时,主要使用两种格式:

❑ 使用< >包含头文件,用于引用系统资源,主要是指Xcode中内置的一些开发资源,如代码中的Foundation.h文件。

❑ 使用" "包含头文件,用于引用“外部”资源,这里的“外部”是指非Xcode内置开发资源,如第三方或者你自己开发的代码。

接下来的main()函数,相信学习过C语言的朋友一定不会陌生,没错,它就是程序的入口,代码会从这里开始执行。在()中是函数的参数,main()中的两个参数与C语言中的相似,其中,args带入命令行指令和参数的数量(使用空白字符分隔),参数argv包含了这些内容。

再看@autoreleasepool指令(@开头的语句也是一种指令),不明白是什么,我们拆开来看,就是auto release pool,自动释放池?这是什么情况呢?实际上,这是Objective-C中一种新的内存自动管理机制,称为ARC(Automatic Reference Counting,自动引用计数)。

在Objective-C代码中,使用ARC技术,可以有效地对内存进行自动管理,将程序员从复杂的内存管理工作中解放出来。如果你在C语言中使用过malloc()、free()等函数手工管理过内存,就会明白我在说什么了。当然,没有玩过C也没关系,现在我们只需要知道,使用Objective-C编程时,在main()函数中使用@autoreleasepool指令就可以使用ARC了,如果你没有百分之二百的信心能够比ARC更好地管理内存,那就选择使用ARC吧。

NSLog()函数用于显示调试信息,其中,第一个参数是显示的内容,可以包含格式化字符;第二个参数开始是格式化字符所对应的数据。下面的代码会显示一个整数的数据。

    @autoreleasepool {
        int intNum = 1;
        NSLog(@"intNum = %i", intNum);  // intNum = 1
    }

最后的return语句用于向函数的调用者返回执行结果(活儿干得怎么样,给调用者发个信号),一般来讲,代码0就意味着任务顺利完成了。对于main()函数来讲,它的调用者就是操作系统。

通过代码的执行,我们看到,第一个程序的主要功能就是显示一条文本信息,这些信息包含在“@”中,我们称为字符串(string)。在Objective-C中,可以使用两种风格的字符串:

❑ C风格字符串,即使用字符数组(char[])组成的字符串,这种字符串除了真正的字符内容,还会由ASC II码中的0值字符(NULL)作为结束,使用转义字符“\0”表示。

❑ 字符串对象,使用NSString或NSMutableString类型处理字符串内容。前面的代码中,使用@""定义的字符串就是NSString对象,大部分情况下,我们会使用这种字符串。

更多字符串的处理,会在第7章详细介绍。