最近休息在家,閒來無事想搞一個iphone的遊戲玩玩,因而買了本 圖靈 的 Object-C基礎教程 看了看,這本書還算比較基礎,裏面講解知識點也比較通俗易懂,尤爲是作過一些開發的人,基本上沒有什麼太大的難點。 web
真正開始接觸 Object-C 跟之前的感覺還真是大不相同,之前沒怎麼接觸過Object-C 感受語法很奇怪,並且因爲最開始對Object-C 瞭解也很少,因此感受爲了一個應用去新學一門語言,並且仍是在 apple 系列裏的語言有些浪費時間不值得,現在真正去接觸瞭解了後才明白,其實Object-C 是對C的一個擴展而已,裏面對C填入了一些新的特性,其實大部分東西跟C仍是同樣的,本人雖然一直從事web開發,但是卻對C是情有獨鍾,這會有時間用Object-C 寫個小遊戲其實對C也會有必定程度上的提升。 算法
今天對Object-C 一些語法上的東西作個簡單的筆記,方便查詢,隨時完善更新。 數據結構
1.Hello World! app
全部的語言都是如此,第一個例子基本都是永恆不變的hello world 框架
Object-C裏的Hello World其實跟C的Hello World基本上是同樣的 iphone
#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { NSLog(@"Hello World!"); }
import的做用和C中的include的做用基本同樣,都說加載一個頭文件到當前的代碼中,然而Object-C 的 import 加載文件的時候,同一個頭文件只會加載一次,這樣就沒必要像C中同樣須要用#ifdef 一個 宏來決定是否加載頭文件。 函數
Foundation/Foundation.h 這個文件是Cocoa下的 Foundation框架的主頭文件,導入這個文件後就可使用這個框架的不少特性,Foundation框架主要處理的是用戶界面層下的一些東西,好比數據通訊,功能實現,以及一些數據結構算法的實現等。 spa
NSLog 這個函數和c的printf 基本相同,只不過在printf的基礎上增長了一些新的東西,好比自動在結束的時候增長\n換行符,增長了時間戳日期戳等。 code
NSLog 參數中字符串前面的 @符號表示這個字符串是 Object-C 風格的字符串 數據類型爲 NSString 而非C風格的字符串。 對象
2.BOOL布爾類型
Object-C中加入了布爾類型,C中通常表示布爾類型都是 用 0 和 1去表示,而Object-C中的布爾類型 使用 YES 和 NO 兩個值來表示的,YES 和 NO實際上是一對 signed char類型的數值,相似於 typedef signed char BOOL的定義。
3.類的定義
因爲面向對象的思想是部分語言的,因此這裏我只標記語法,而不對面向對象作過多的解釋和評論。
Object-C的類的定義分爲兩部分,一部分是接口@interface 部分,另一部分是 實現@implementation 部分,接口部分我的感受跟C的頭文件的做用相似,主要定義了一些類的成員和方法的原型,而 實現 部分則是對這些接口中聲明的具體實現。
#import <Foundation/Foundation.h> @interface Hero : NSObject { NSString *iName; int iHP; } - (void) setName:(NSString*) NAME; - (void) setHP:(int) HP; - (void) getInfo; @end @implementation Hero - (void) setName:(NSString*) name { iName = name; } - (void) setHP:(int) HP { iHP = HP; } - (void) getInfo { NSLog(@"PLAYER: %@ HP:%d", iName, iHP); } @end@interface 部分 和 @implementation 部分都是由 @end 結束
@interface 的格式爲
@interface 類名:基類 { 成員變量列表 } 方法原型列表 @end@implementation 的格式爲
@implementation 類名 { 成員變量列表 } 方法實現 @endObject-C 的方法由 - 開始(若是以 + 開始,則表示該方法必須用類名調用,相似於PHP的靜態函數) 接着是 返回值類型 函數名 : 參數列表
- (返回值類型) 方法名:參數列表 { 方法體 }若是該方法沒有參數列表部分則沒有冒號,因爲@interface 部分只是方法原型的一個聲明,並無具體的實現,因此沒有方法體,直接以分號結束。
類的實例化以及調用
Hero *DJ = [Hero new]; [DJ setHP:100]; [DJ setName:@"死亡騎士"] [DJ getInfo];
方法多個參數的聲明和調用方法都很怪
- (void) setStyle:(int) font setColor:(int) RGB;
[obj setStyle:SONGTI setColor:REDCOLOR]方法的調用必須指明參數的名稱,第一個參數的名稱爲方法名,其他爲聲明時候所制定的名稱。