让我们从一个简单的命令行程序开始吧。给定一系列随机的词作为参数,由该命令行程序将多余的词删除,并将剩下的词按字母排序,打印在标准输出上。下面的列表显示该程序的一个典型执行结果。
下面的列表是一个简单的Cocoa工具的输出
localhost> SimpleCocoaTool a z c a l q m z |
a |
c |
l |
m |
q |
z |
下面的列表显示该程序的Objective-C代码。
使输入的词唯一并将其排序的工具的Cocoa代码
#import <Foundation/Foundation.h> |
|
int main (int argc, const char * argv[]) { |
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; |
NSArray *args = [[NSProcessInfo processInfo] arguments]; |
NSCountedSet *cset = [[NSCountedSet alloc] initWithArray:args]; |
NSArray *sorted_args = [[cset allObjects] |
sortedArrayUsingSelector:@selector(compare:)]; |
NSEnumerator *enm = [sorted_args objectEnumerator]; |
id word; |
while (word = [enm nextObject]) { |
printf("%s\n", [word UTF8String]); |
} |
|
[cset release]; |
[pool release]; |
return 0; |
} |
这段代码创建并使用了几个对象:一个自动释放池,用于内存管理;集合对象(多个数组和一个集合),用于对指定的词进行唯一性处理和排序;一个枚举对象,用于遍历最终数组的元素以及将它们打印在标准输入上。
关于代码,您可能注意到的第一件事是代码很短,可能比同样功能的ANSI C程序短得多。虽然很多代码可能看起来有些奇怪,但代码中的很多元素又和ANSI C类似,比如赋值操作符、流程控制语句( while)、对C语言连接库例程(printf)的调用、以及基本的标量类型等等。Objective-C的基础显然是ANSI C。
本章的剩余部分将考察这段代码中的Objective-C元素。这些元素将作为例子,用于讨论从消息发送机制到内存管理技术的各种主题。如果您之前从未见过Objective-C的代码,那么这个例子可能看起来很可怕,又绕又晦涩,但是这个印象很快就会消失。Objective-C实际上是一种简单而优雅的编程语言,易于学习,编程也很直接。