Object-C學習筆記(一)

最近休息在家,閒來無事想搞一個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 類名
{
    成員變量列表
}
方法實現
@end
Object-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]
方法的調用必須指明參數的名稱,第一個參數的名稱爲方法名,其他爲聲明時候所制定的名稱。
相關文章
相關標籤/搜索