天天看點

黑馬程式員——ObjC基礎—第一個程式

----------- Java 教育訓練、 Android 教育訓練、 IOS 教育訓練、 .Net 教育訓練、期待與您交流!------------  Objective-C(簡稱OC)語言是一種基于c語言的面向對象的進階語言,主要運用于蘋果各産品系統及軟體的開發,近年來,由于蘋果的壯大而逐漸興起。Objective-C和其他語言相比起來,具有以下幾點優勢(個人觀點): a、面向對象,作為一門進階語言,面向對象是OC的主要優勢。

b、運作時,很多程式設計語言的内部資料在編譯的過程中就已經定義好,按部就班的去執行,OC增加了一種特殊的類型(id類型),運用這種特性,我們可以建立一些無需事先知道參數類型就可以設計功能,在程式的運作過程中,再根據具體的語境來判斷,非常的靈活。 c、消息機制,OC語言是以c語言為基礎的語言,但是他的規範要求我們屏蔽掉函數方法的調用,他采用一種更加安全有效的消息機制來處理具體的問題,在該語言中,實際上是采用SEL類型的資料(字元串)對具體方法進行了封裝,我們通過通路SEL來通路具體方法。在第一條中我們了解到,OC中存在運作時,消息機制充分利用這種特性,在程式的運作過程中才根據需要調用方法,同時他對參數的要求也更加靈活,無效的參數(消息)也不會導緻程式的崩潰。 d、OC語言與Java等基于c的語言還有一個不同點是他可以直接内嵌c語言,實作混編。我們知道c語言在操作底層方面有無法比拟的優勢,這種優勢同樣繼承到了OC中。 下面通過一個簡單的例子來了解一下OC語言的使用。

1、需要的東西 a、首先要有一台蘋果電腦,當然黑蘋果也是可以的,本人使用MacBook Air; b、預裝XCode5.1.1,當然其他版本也是可以的;

2、開始 打開xcode軟體,預設彈出建立工程向導,選擇Command Line Tool以建立一個基于終端的指令視窗程式,Type欄裡選擇Foundation架構(這是蘋果建立的專門用于蘋果開發的資源庫,此處選擇這個架構後,在程式中我們就可以任意使用),建立好的工程如下圖所示:

黑馬程式員——ObjC基礎—第一個程式

該工程檔案分為三個部分,列舉如下: HelloWorld:我們的工程放在這 Frameworks:系統資源在這裡(Foundation架構) Products:生成的程式在這裡 在我們的工程目錄裡,我們可以找到一個名叫main.m的檔案,這就是我們主要的工作檔案,main函數(程式入口)在這個檔案裡。在右邊的視窗中訓示了main.m中的内容,我們大緻可以讀懂其内容。 一些新的内容我在裡面加上了注釋:

#import <Foundation/Foundation.h> // 包含的架構(OC中采用import取代include)
/* 
 注:在c語言中關于頭檔案的包含是一個很頭疼的問題,在有大量檔案的時候,為了防止頭檔案被多次包含,需要用到條件編譯指令,這樣導緻每一個頭檔案裡都有大量的條件編譯指令,我們把大量時間浪費在這上面是不合适的,而import則代為處理這些工作,類似的簡化操作的指令,我們以後會遇到很多。
*/
int main(int argc, const char * argv[]){ // 程式入口,後面的參數為運作時接收的參數

    @autoreleasepool { // 自動釋放記憶體池
    /*
    注:自動釋放池是一種特殊的對象,他會在大括号括起來的内容在走到結尾的時候自動對内部的堆資料進行清理,為了友善學習,這裡我們一般直接删掉()
    */
        
        // insert code here...
        NSLog(@"Hello, World!"); // 代碼區域
        /*
        注:又是一個陌生的函數,這個函數是Foundation架構中帶的一個函數,用于取代printf進行調試輸出,當然他也具有一些新的特性,這個函數在輸出的時候包含一些運作時特性,而且能夠自動換行,同時,對于新增的對象,也增加了占位輸出的功能。必須了解的是,NSLog函數是以printf函數為基礎的,當然在這裡我們也可以直接使用printf函數。注意格式中的@符号。
        */
    }
    return 0;
}
           

3、編譯和調試 在xcode中編譯連結工作相當簡潔,隻需要點選左上角的三角形按鈕即可,程式會在下方的視窗輸出:

2015-02-08 11:38:30.519 HelloWorld[11671:303] Hello, World!
           

4、OC還有哪些新的東西? a、新增BOOL類型

BOOL a = YES;
    BOOL b = NO;
    
    NSLog(@"a = %d  大小為: %lu Byte", a, sizeof(a));
    NSLog(@"b = %d  大小為: %lu Byte", b, sizeof(b));
           

輸出:

2015-02-08 11:47:04.704 Study[11784:303] a = 1  大小為: 1 Byte
2015-02-08 11:47:04.708 Study[11784:303] b = 0  大小為: 1 Byte
           

b、字元串

NSString *[email protected]"a string"; // 字元串對象的定義
    
    NSLog(@"%@", str); // 字元串對象的輸出
           

字元串在OC中以對象的形式存在,關于對象将另行讨論,輸出如下:

2015-02-08 11:58:21.088 Study[11813:303] a string
           

c、SEL類型

SEL s = @selector(sss);
    
    NSLog(@"%s", s); // 會出警告(s為SEL類型的結構體,内部包含一個字元串)
           

輸出結果為:

2015-02-08 12:11:06.388 Study[11908:303] sss
           

d、nil 與 NIL

這是表示對象空的值。

NSLog(@"%p", nil);
    NSLog(@"%p", Nil);
           

輸出結果為:

2015-02-08 12:13:27.842 Study[11952:303] 0x0
2015-02-08 12:13:27.845 Study[11952:303] 0x0
           

習慣上,nil用于指向空,而Nil特别用于指向空的類。 e、id對象 采用id定義的對象是一個類型任意的對象。将在以後接觸到。

f、封裝 OC對基本的資料類型進行了對象化封裝,增加了資料處理的靈活性,如:

<strong> </strong>   NSNumber *a = [[NSNumber alloc] initWithInt:65]; // 建立數字對象
    
    NSLog(@"%@", a); // 輸出
           

上述代碼将數字封裝成對象,對象具有很多靈活的操作方法,而且能夠更友善的進行傳遞。

g、SEL類型

NSObject *obj = [NSObject new];
    SEL s = @selector(description); // 建立一個SEL指針
    NSString *str = [obj performSelector:s]; // 相當于 NSString *str = [obj description];
           

OC中對方法的通路是通過SEL類型的指針來實作的,每一個方法内部都有一個SEL類型的指針_cmd,通常的方法通路是通過這個_cmd指針間接通路的。

h、宏占位符 以下是常見的Xcode宏占位符,友善我們的調試工作。

// 常用macros
        NSLog(@"目前行号:%d",__LINE__);
        printf("目前檔案%s",__FILE__);//NSLog無法輸出中文字元
        NSLog(@"目前函數:%s",__FUNCTION__);
        NSLog(@"目前函數:%s",__func__);
        NSLog(@"目前函數:%s",__PRETTY_FUNCTION__);
           

----------- Java 教育訓練、 Android 教育訓練、 IOS 教育訓練、 .Net 教育訓練、期待與您交流!------------