說明:這個Objective-C專題,是學習iOS開發的前奏,也為了讓有物件導向語言開發經驗的程式員,能夠快速上手Objective-C。如果你還沒有編程經驗,或者對Objective-C、iOS開發不感興趣,請忽略。學習本專題之前,建議先學習C語言專題。
在上一講,已經建立了第一個OC程式,這講就來解析它內部的代碼。
查看項目結構可以發現這個程式中只有一個源檔案:main.m
開啟main.m檔案,代碼如下
1 #import <Foundation/Foundation.h> 2 3 int main(int argc, const char * argv[]) 4 { 5 6 @autoreleasepool { 7 8 // insert code here... 9 NSLog(@"Hello, World!");10 11 }12 return 0;13 }
1.程式的進入點:main函數
跟C程式一樣,OC程式的進入點依然是main函數。在main.m的第3行已定義了一個main函數。
2.@autoreleasepool
在Java中,有記憶體回收機制,系統會自動回收不再使用的對象;而OC是不支援記憶體回收的,需要開發人員編寫代碼來釋放對象所佔用的記憶體。在第6行有個@autoreleasepool{},這是跟記憶體管理有關的,暫時不用理解它的意思,你只需要記住:以後的OC代碼都寫在@autoreleasepool的{}內部。
3.NSLog
1> 第9行的NSLog是一個日誌輸出函數,它可以將傳入的OC字串參數輸出到控制台上。
2> 函數參數@"Hello, Wolrd!"是一個OC字串,並不是C語言字串,所有OC字串的前面都有個@。
3> 第9行代碼NSLog(@"Hello, World!");的輸出結果是:
紅框左邊的資訊是NSLog自動加上去的,比如日誌輸出時間、項目名稱等。而且NSLog輸出完畢後自動換行。
4> NSLog也可以像C語言的printf函數一樣支援格式符
1 int age = 10;2 NSLog(@"My age is %i and height is %.2f", age, 1.55f);
* %i表示接收整型資料
* %f表示接收浮點型資料,%.2f表示保留2位小數
* 輸出結果:
2013-04-06 17:43:07.380 第一個OC程式[693:303] My age is 10 and height is 1.55
4.#import
1> #import是一個預先處理指令,作用跟C語言的#include類似,都是 包含(拷貝)某個檔案的內容 到 預先處理指令所在的位置。
2> 第1行的#import <Foundation/Foundation.h>表示包含Foundation架構中的Foundation.h檔案。
1) Foundation架構中包含了很多常用的類和函數,比如字串處理類NSString、日誌輸出函數NSLog。它的重要程度相當於Java中的java.lang.*
2) Foundation架構和Foundation.h檔案的位置:
3> 我在C語言專題的第三講說過:.h稱為標頭檔,一般用來聲明一些函數,想要使用這些函數,就必須用#include包含函數所在的標頭檔。我們在第9行中使用的NSLog函數存在於Foundation.h檔案中,因此要先包含Foundation.h檔案才能使用NSLog函數。就好像在Java中,你用import關鍵字引入一個類後才能正常使用這個類。
4> 在C\C++中,我們用#include來包含標頭檔,缺點就是同一個標頭檔可能被包含多次。為瞭解決這個問題,一般會這樣寫標頭檔:
#ifndef _TEST_H_#define _TEST_H_/*.....*/#endif
我們在OC中,就使用#import來包含標頭檔,優點是可以自動防止同一個標頭檔被包含多次。
5> #import <...>表示包含系統內建的檔案,#import "..."表示包含開發人員自己建立的檔案