一個(gè)簡單的Cocoa命令行工具
讓我們從一個(gè)簡單的命令行程序開始吧。給定一系列隨機(jī)的詞作為參數(shù),由該命令行程序?qū)⒍嘤嗟脑~刪除,并將剩下的詞按字母排序,打印在標(biāo)準(zhǔn)輸出上。下面的列表顯示該程序的一個(gè)典型執(zhí)行結(jié)果。
下面的列表是一個(gè)簡單的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; |
} |
這段代碼創(chuàng)建并使用了幾個(gè)對象:一個(gè)自動(dòng)釋放池,用于內(nèi)存管理;集合對象(多個(gè)數(shù)組和一個(gè)集合),用于對指定的詞進(jìn)行唯一性處理和排序;一個(gè)枚舉對象,用于遍歷最終數(shù)組的元素以及將它們打印在標(biāo)準(zhǔn)輸入上。
關(guān)于代碼,您可能注意到的第一件事是代碼很短,可能比同樣功能的ANSI C程序短得多。雖然很多代碼可能看起來有些奇怪,但代碼中的很多元素又和ANSI C類似,比如賦值操作符、流程控制語句( while)、對C語言連接庫例程(printf)的調(diào)用、以及基本的標(biāo)量類型等等。Objective-C的基礎(chǔ)顯然是ANSI C。
本章的剩余部分將考察這段代碼中的Objective-C元素。這些元素將作為例子,用于討論從消息發(fā)送機(jī)制到內(nèi)存管理技術(shù)的各種主題。如果您之前從未見過Objective-C的代碼,那么這個(gè)例子可能看起來很可怕,又繞又晦澀,但是這個(gè)印象很快就會(huì)消失。Objective-C實(shí)際上是一種簡單而優(yōu)雅的編程語言,易于學(xué)習(xí),編程也很直接。