一個簡單的Cocoa命令行工具
讓我們從一個簡單的命令行程序開始吧。給定一系列隨機的詞作為參數,由該命令行程序將多余的詞刪除,并將剩下的詞按字母排序,打印在標準輸出上。下面的列表顯示該程序的一個典型執行結果。
下面的列表是一個簡單的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實際上是一種簡單而優雅的編程語言,易于學習,編程也很直接。