官术网_书友最值得收藏!

2.1 代碼文件

第1章,我們已經看到了一個簡單Objective-C程序是如何跑起來的。下面,我們來看一看幾種常見的代碼文件。

首先請.h文件出場,誰讓它是頭(header,如果你喜歡,可以加兒音)文件呢。那么,頭文件的功能是什么呢?和C/C++相似,在Objective-C中,頭文件的作用就是聲明一系列可供其他文件使用的資源,如函數、全局變量、類的接口部分等。請注意,在頭文件里只負責聲明,就當是Mark一下,刷一下存在感,而不是資源真正的定義和實現,那么,這些工作都是在哪里完成的呢?馬上請出第二位。

有請.m文件出場,這是模塊(module)文件。是的,真正的定義和實現一般都會放在.m文件中,如前面提到的函數的定義、全局變量的定義、類的實現部分等內容。稍后,我們會看到.h和.m文件是如何配合使用的。

深呼吸,下面繼續!

.c文件,C語言代碼文件,它的角色與.m的角色相似,經常需要與頭文件一起使用。當我們開發iOS或OS X系統下的應用時,會用到很多C語言實現的資源,這些資源定義在一個總稱為Core Foundation的框架中,比如,在圖形處理時,我們會用到Core Graphics框架中的資源。

.cpp文件,C++源代碼文件。是的,我們同樣可以編寫C plus plus代碼,聽說它也是面向對象的。

.swift文件,這只鳥看著挺眼熟,就是Swift源代碼文件了。Swift是另一種來自蘋果公司的編程語言。此外,聽說一只小Swift正在四處漂泊,也許作者會帶著大家了解它的故事,一起期待吧!

現在,打開Xcode,我們繼續使用第1章創建的SimpleOC項目,當然,也可以新建一個OS X系統下的“Command Line Tool”類型項目。

接下來,在項目中,通過Xcode菜單“File”→“New”→“File”項創建一個頭文件(Header File),并命名為CApp.h,如圖2-1所示。

圖2-1 創建頭文件

接下來,我們修改這個文件的內容,首先,可以把綠色內容刪除,也可以修改為其他內容,哪個星球的語言就不重要了,只是要記得使用//作為行的開頭,而且習慣上還會加一個空格。下面的代碼就是我修改后的CApp.h文件。

    #ifndef __CApp_h__
    #define __CApp_h__
    extern int gDeviceType;
    void deviceInit();
    #endif

這么多#符號是什么情況?我們說過,它們稱為預處理指令。

預處理,就是預先處理?是的,只不過這些工作由編譯器來完成,我們只要正確書寫就行了。那怎么正確書寫呢?這個也不難,基本的要求就是:#符號別忘了,字母拼對了,最后就不要加分號了!真的很簡單,對吧。

接下來,我們先從字面上了解這些指令的功能。

#ifndef和#endif指令的功能是,如果沒有定義“__CApp_h__”宏(使用#define指令定義,稍后說明),則執行#ifndef和#endif指令之間的內容。默認情況下,Xcode中會自動使用“項目名稱+頭文件名”的格式來定義宏,我們可以使用默認的宏名稱,也可以根據項目約定進行相應的修改。

#define指令用于定義宏,這是貨真價實的符號,而且,在定義宏的同時也可以定義它表示的值,如:

    #define DT_IPAD 1000

本例中,編譯器開工時,會在代碼中使用1000替換所有DT_IPAD標識,而這也是宏的基本功能之一。在后續的內容中,我們會看到更多關于宏的應用。

再來看兩個聲明語句(都說了頭文件中只是聲明了):

    extern int gDeviceType;
    void deviceInit();

第一條語句聲明了一個整數類型(int)的變量gDeviceType,其中extern關鍵字說明此變量是定義在另外的文件中的,第二條語句聲明了一個函數deviceInit()。請注意,它們都以分號作為結束,這是基本的語句形式,請大家區分語句和預處理指令。此外,我不會告訴你它們是定義在CApp.m文件里的。

接下來,通過Xcode菜單“File”→“New”→“File”,創建一個Objective-C文件(Objectie-C File),并命名為CApp.m,如圖2-2所示。

圖2-2 創建模塊文件

然后,修改CApp.m文件的內容如下面的代碼。

    #import "CApp.h"
    int gDeviceType;
    void deviceInit()
    {
        NSLog(@"項目初始化工作...");
        gDeviceType = DT_IPAD;
    }

最后,我們在main()函數中(main.m文件)使用它們,如下面的代碼。

    #import <Foundation/Foundation.h>
    #import "CApp.h"
    int main(int argc, const char *argv[])
    {
        @autoreleasepool {
            deviceInit();
            NSLog(@"%i", gDeviceType);
        }
        return 0;
    }

執行代碼,顯示結果如圖2-3所示。

圖2-3 頭文件與模塊文件應用測試結果

通過這部分的練習,我們應該了解.h和.m文件是如何配合使用的,為進一步的開發工作做好準備。

此外,當我們需要使用某個頭文件的資源時,不要忘了使用#import指令引用它,對于我們自己創建的頭文件,使用一對雙引號來引用,如下面的代碼。

    #import "CApp.h"
主站蜘蛛池模板: 松滋市| 万州区| 阿尔山市| 图们市| 吉安县| 全南县| 鄂温| 水城县| 疏勒县| 双城市| 册亨县| 太仓市| 石门县| 吴旗县| 巫溪县| 合阳县| 特克斯县| 鞍山市| 临汾市| 宜兴市| 宿迁市| 屏山县| 宜宾市| 治县。| 崇礼县| 大渡口区| 论坛| 兴宁市| 杨浦区| 卓尼县| 河东区| 平阴县| 东源县| 凤翔县| 南投市| 萨迦县| 寿阳县| 苍山县| 夹江县| 许昌市| 沙坪坝区|