- Objective-C和Sprite Kit游戲開發從入門到精通
- 曹化宇
- 1554字
- 2021-01-07 18:57:36
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"
- Word/Excel/PPT 2007辦公應用從入門到精通
- Word-Excel-PPT 2010辦公應用從入門到精通(實戰強化版)
- Word/Excel/PPT 商務辦公效率手冊:從小白到辦公大神
- Excel高效辦公:公司表格設計(修訂版)
- Excel高效辦公:VBA范例應用(修訂版)
- Excel辦公高手應用技巧
- Excel 2007表格·數據·圖表完全自學手冊
- 零基礎學游戲UI設計
- Excel經典教程:公式與函數
- Word/Excel/PowerPoint三合一應用大全
- Mapping and Visualization with SuperCollider
- Office 2016辦公應用從入門到精通
- 掌中寶:Word辦公應用技巧
- PowerPivot for Advanced Reporting and Dashboards
- Office2010高級應用教程