標籤:
第一個OC程式源碼如下:
#import <Foundation/Foundation.h>int main(int argc, const char * argv[]){ @autoreleasepool{ NSLog(@"Hello,World!"); } return 0;}
下面對這個輸出"Hello,World!"的OC程式做下介紹:
#import
#import是GCC編譯器提供的,可以保證標頭檔只被包含一次。
#import <Foundation/Foundation.h>語句告訴編譯器查看Foundation架構中的Foundation.h標頭檔。
架構
架構是一種聚集在一個單元的組件集合,包含標頭檔,庫,映像,音效檔等。
蘋果公司將Cocoa,Carbon,QuickTime和OpenGL等技術作為框架組提供。Foundation架構是處理使用者介面之下的層(layer)中的特性,例如資料結構和通訊機制。
每個架構都是一個重要的技術集合,通常包含數十個甚至上百個標頭檔。每個架構都有一個主標頭檔,它包含了該架構中的其它各個標頭檔。通過使用#import匯入主標頭檔,可以使用該架構中所有的組件。
Main函數
Main函數的兩個參數,argc表示參數(包括程式名)個數,argv是一個參數指標數組,並且每一個指標都指向一個字串,表示一個參數。argv[0]就是程式名,argv[1]才是第一個參數。
NSString *str = [NSString stringWithUTF8String:argv[0]];NSLog(@"%@",str);
輸出如下:
NSLog函數
NSLog(@"Hello,World!");
向控制台輸出”Hello,World!”,類似與C語言中的printf()。NSLog()接受一個字串作為其第一個參數,該字串可包含格式說明符(如%d)。
@符號是OC在標準C語言基礎上添加的特性之一,雙引號中的字串前有一個@符號,表示引用的字串應該作為Cocoa的NSString元素來處理。
\n 表示換行
\t 表示Tab功能
%i 表示整數
%f 表示float
%@ 表示字串
%d 表示double
%c 表示字元char
@autoreleasepool 自動釋放池
@autoreleasepool方便快捷管理記憶體的方案, 自動釋放池是OC裡面的一種記憶體回收機制,一般可以將一些臨時變數添加到自動釋放池中,統一回收釋放,當自動釋放池銷毀時,池裡面的所有對象都會調用一次release,也就是計數器會減1,但是自動釋放池被銷毀了,裡面的對象並不一定會被銷毀。
OC對象發送一條autorelease訊息,就會把這個對象添加到最近的自動釋放池中也就是棧頂釋放池中, Autorelease實際上是把對release的調用延遲了,對於每一次autorelease,系統只是把對象放入了當前的autorelease pool中,當pool被釋放時,pool中所有的對象都會被調用release。
自動釋放池可以自動追蹤需要延遲釋放的對象。
將對象添加自動釋放池維護的列表中:[object autorelease];。
當自動釋放池本身銷毀時,池子裡的所有的對象對會release。
使用來自Foundation,UIkit,AppKit等架構中的類是,也需要先建立自動釋放池,因為來自這些架構的類會建立並返回自動釋放的對象。
建立自動釋放池
//MRCNSAutoReleasePool *pool = [[NSAutoReleasePool alloc]init];…//需要釋放的對象[pool realse]//ARC@autoreleasepool{ …//需要釋放的對象}
使用自動釋放池
自動釋放池可以建立多個
多個自動釋放池形成棧式結構
對象放入最近的棧頂的自動釋放池
不要把所有的對象都放入自動釋放池,只放需要延遲釋放的對象
對於大量佔有記憶體的對象,建立就近的自動釋放池,保證它快速得到銷毀
以上就是對一個簡單的完整的OC程式的分析,如有錯誤,請批評指正。
第一個OC程式