2.1 Objective-C的HeIIo WorId程序
如同学习任何新的编程语言和工具一样,我们通过开发HelloWorld程序来获得对这种语言使用的初步印象。在下面的例子里,我们将开发一个简单的控制台应用程序,程序将在控制台窗口输出欢迎信息。
为此,首先启动Xcode开发环境,在弹出的窗口中选择创建新项目,接着在弹出的选择窗口中,在左侧选择Mac OS X下面的“Application”,然后在右侧的项目模板选择窗口中选择“Command Line Tool”项目模板,Xcode将为我们创建一个基于控制台的应用程序。单击“Next”按钮,注意如果Xcode的版本不同,图2-1显示的内容可能会略有不同,本书中的所有代码均通过Xcode 4.5.2来创建。
图2-1 选择“Command Line Tool”项目模板
在接下来的窗口中,在“Product Name”文本框中输入项目的名称 Hello World Console。在“Company identifier”文本框中因为我们之前创建 iPhone 应用时输入过iPhone.book,这里Xcode会智能地显示之前的iPhone.book,其他的选项都保持默认值,如图2-2所示。
图2-2 输入项目详细信息
单击“Next”按钮选择项目存储路径后创建项目。项目创建完成后单击“Hello World Console”虚拟目录下的main.m文件会显示如图2-3所示的窗口,左侧是项目导航栏窗口,右侧编辑区域显示main.m源代码文件。在Objective-C里,代码文件以.m为后缀名。
图2-3 main.m文件
这和我们前面看到的iOS应用项目的main文件的内容非常相似,如果觉得不好理解,可以去掉@autoreleasepool 标记。@autoreleasepool 标记说明了内存的管理方式,这对于iPhone应用开发来说并不重要,可以忽略。修改后代码如下:
1: #import <Foundation/Foundation.h> 2: int main (int argc, const char *argv[]) 3: { 4: NSLog (@"Hello, World!"); 5: return 0; 6:}
不用做任何其他改动了,在创建程序时Xcode已经自动地添加了上面代码段中第4行显示的NSLog方法,在控制台输出日志信息:
4: NSLog (@"Hello, World!");
NSLog方法负责在控制台窗口输出格式化的信息,单击窗口左上角的Run按钮或者按下+R组合键执行程序,如图2-4所示。
图2-4 如何运行程序
启动运行后,马上可以观察到Xcode项目窗口下方的控制台输出窗口中显示了如图2-5所示的结果。
图2-5 查看执行结果
图2-5显示的是调试窗口区域,可以通过单击工具栏区域的按钮来显示或隐藏调试窗口区域,如图2-6所示。
图2-6 如何显示或隐藏调试窗口区域
回过头来重新阅读这段代码。有过C、Java或者C#等语言开发经验的开发者对这段代码不会陌生。代码的第 1 行是对头文件的引用,在这里是 Foundation 库的引用。注意Objective-C中使用import而不是include关键字作为导入命令的关键字。
1: #import <Foundation/Foundation.h>
接下来有一个main函数和其他语言一样作为执行的入口:
2: int main (int argc, const char *argv[])
NSLog 方法如同 C 语言里面的 printf,Java 里面的 System.println,或者 C#里面的Console.Writeln,用来在控制台窗口输出信息。前面提到 C 语言的代码完全可以在Objective-C的环境下编译和执行,有兴趣的开发者可以尝试将NSLog替换成printf,也会得到同样的输出结果,但 NSLog 会输出一些日期及精确到毫秒的时间戳信息,方便开发者调试。
NSLog接受NSString类型变量作为参数,因此需要在提供的字符串前面加上“@”符号来告诉编译器这是一个NSString,否则编译器会认为是C语言的字符串从而给出编译警告。最后一行返回0,表明main函数正常退出。
4: NSLog (@"Hello, World!");
更多信息:在导航栏窗口看到.1和.pch文件不要奇怪,它们的用处如下。
➢ Hello_World.1:参照www.fileinfo.com/extension/man,是UNIX系统下的man帮助文件,但man文件很少以.man结尾,而是以1到8结尾。
➢ Hello World-Prefix.pch文件:预编译文件,其中引用了一些头文件并将其存在缓存里面,这样编译时可以自动地从缓存中读出从而加快编译的速度。
Objective-C完全支持面向过程的编程,可以在代码中定义函数,并在main函数或者其他的函数中调用,不过针对iOS进行编程使用更多的是面向对象的编程(OOP,Object Oriented Programming),我们在 iPhone 应用开发中大多数时候需要学习和了解的是Objective-C语言面向对象编程的部分。