標籤:des style blog http io ar color sp for
在之前的項目中,我們編程都是直接寫在一個main.m檔案中。類的main()函數,@interface和@implementation部分都塞進一個檔案。這種結構對於小程式和簡便應用來說還可以。但是專案檔一多,規模一上去。這樣就很不好,既不美觀,代碼也不好管理。
那麼,接下來這篇博文,我們就接著上一節的例子。將他定義和實現的代碼分開,每個對象一個類。在Objective-c中,定義的檔案寫在h檔案中,實現的代碼寫在m檔案中。於是,我們先建立一個Command Tools項目。
選擇專案檔要儲存的地方
然後在建立的項目中依次建立三個類對象Car,Engine,Tire。每個類建好,都會產生兩個檔案(.h:寫定義方法,.m:寫實現方法)。
然後在Engine.m中寫實現方法:
1 #import "Engine.h"2 3 @implementation Engine4 -(NSString *)description5 {6 return (@"I am an engine. Vrooom!");7 }8 @end
Tire.m中寫實現方法:
1 #import "Tire.h"2 3 @implementation Tire4 -(NSString *) description5 {6 return (@"I am a tire. I last a while");7 }8 @end
接下來修改Car.h檔案,寫Car類的定義方法:
1 #import <Foundation/Foundation.h> 2 #import "Engine.h" 3 #import "Tire.h" 4 5 @interface Car : NSObject 6 { 7 Engine *engine; 8 Tire *tires[4]; //四個輪子,定義一個四個數的數組。 9 }10 -(Engine *) engine;11 -(void) setEngine:(Engine *) newEngine;12 -(Tire *) tireAtIndex:(int) index;13 -(void) setTire:(Tire *) tire atIndex:(int) index;14 -(void) drive;15 @end // Car
注意:要先在最上面引用“Engine.h”和“Tire.h”。否則,代碼就不能編譯通過。
然後是修改Car類的實現方法:
1 #import "Car.h" 2 3 @implementation Car 4 -(void) setEngine:(Engine *) newEngine 5 { 6 engine = newEngine; 7 } 8 9 -(Engine *) engine10 {11 return (engine);12 }13 14 -(void) setTire:(Tire *) tire15 atIndex:(int) index16 {17 if(index<0 || index>3)18 {19 NSLog(@"bad index(%d) in setTire:atIndex",20 index);21 exit(1);22 }23 tires[index] = tire;24 }25 26 -(Tire *) tireAtIndex:(int) index27 {28 if(index<0 || index>3)29 {30 NSLog(@"bad index(%d)in tireAtIndex:",31 index);32 exit(1);33 }34 return (tires[index]);35 }36 37 -(void) drive{38 NSLog(@"%@",engine);39 NSLog(@"%@",tires[0]);40 NSLog(@"%@",tires[1]);41 NSLog(@"%@",tires[2]);42 NSLog(@"%@",tires[3]);43 }44 @end
最後,只要在main主函數的檔案中,引用三個類檔案的定義檔案就可以了,實現的代碼不用變:
1 #import <Foundation/Foundation.h> 2 #import "Engine.h" 3 #import "Tire.h" 4 #import "Car.h" 5 6 int main(int argc, const char * argv[]) 7 { 8 Car *car = [Car new]; 9 Engine *engine = [Engine new];10 [car setEngine:engine];11 for(int i=0;i<4;i++)12 {13 Tire *tire = [Tire new];14 [car setTire:tire atIndex:i];15 }16 17 [car drive];18 return 0;19 }
專案檔的基本結構,以及啟動並執行結果
由於本篇博文只是簡單的將代碼結構重新的整理了下,至於功能代碼則和上一篇中介紹的完全相同,這邊就不再細說了。如果朋友們感興趣或者有看不懂的,可以查看上一篇博文,或者給我留言。好了,時間不早了,洗洗早點睡吧。
《objective-c基礎教程》學習筆記(八)—— 拆分介面和實現