Objective-C边学边记-5:XCode源文件组织

@class关键字
如要需要导入某类的功能代码则需要包含这个类的.h文件,如果只需要知道这个东西是个类(如某文件中如下声明: Person *person; )使用@class就可以了(@class Person;)。正确的使用@class指令能够减少编译时间。

源文件组织示例:

 

 

//

//  Tire.h

//  car4

//

//  Created by Elf Sundae on 10-10-20.

//  Copyright 2010 __MyCompanyName__. All rights reserved.

//



#import <Cocoa/Cocoa.h>



@interface Tire : NSObject

@end

 

 

 

 

//

//  Tire.m

//  car4

//

//  Created by Elf Sundae on 10-10-20.

//  Copyright 2010 __MyCompanyName__. All rights reserved.

//



#import "Tire.h"





@implementation Tire



- (NSString *) description

{

	return(@"I am a Tire");

}

@end

 

 

 

 

//

//  Engine.h

//  汽车引擎

//

//  Created by Elf Sundae on 10-10-20.

//  Copyright 2010 __MyCompanyName__. All rights reserved.

//



#import <Cocoa/Cocoa.h>





@interface Engine : NSObject

@end

 

 

 

 

//

//  Engine.m

//  

//	

//

//  Created by Elf Sundae on 10-10-20.

//  Copyright 2010 __MyCompanyName__. All rights reserved.

//



#import "Engine.h"





@implementation Engine



- (NSString *) description

{

	return  (@"I am a Engine");

}



@end



 

 

 

//

//  V8.h

//  car4

//

//  Created by Elf Sundae on 10-10-20.

//  Copyright 2010 __MyCompanyName__. All rights reserved.

//



#import <Cocoa/Cocoa.h>

#import "Engine.h"





// *******************

// V8 Engine Class

@interface V8 : Engine

@end





 

//

//  V8.m

//  car4

//

//  Created by Elf Sundae on 10-10-20.

//  Copyright 2010 __MyCompanyName__. All rights reserved.

//



#import "V8.h"





@implementation V8



- (NSString *) description

{

	return @"I am a V8 Engine!";

}



@end // V8



 

 

//

//  Car.h

//  car4

//

//  Created by Elf Sundae on 10-10-20.

//  Copyright 2010 __MyCompanyName__. All rights reserved.

//



#import <Cocoa/Cocoa.h>



@class Engine;

@class Tire;





@interface Car : NSObject

{

	Engine *engine;

	Tire *tires[4];

}

// 添加getter,setter

- (Engine *) engine;

- (void) setEngine:(Engine *) m_engine;



- (Tire *) tireAtIndex: (int) index;	//通过索引器访问该属性

- (void) setTire: (Tire *) m_tire : (int) index;



- (void) print;



@end

 

 

//

//  Car.m

//  car4

//

//  Created by Elf Sundae on 10-10-20.

//  Copyright 2010 __MyCompanyName__. All rights reserved.

//



#import "Car.h"

#import "Engine.h"

#import "Tire.h"





@implementation Car





//- (id) init	// 初始化Car

//{

//	if (self = [super init]) {

//		engine = [Engine new];

//		

//		tires[0] = [Tire new];

//		tires[1] = [Tire new];

//		tires[2] = [Tire new];

//		tires[3] = [Tire new];

//	}

//	

//	return self;

//}



- (Engine *) engine

{

	return engine;

}



- (void) setEngine:(Engine *)m_engine

{

	engine = m_engine;

}



- (Tire *) tireAtIndex:(int)index

{

	if (index < 0 || index > 3)

	{

		NSLog(@"bad index (%d) in \"tireAtIndex:\"",

		      index);

		

		exit(1);

	}

	

	return tires[index];

}





- (void) setTire:(Tire *)m_tire :(int)index

{

	if (index < 0 || index >3)

	{

		NSLog(@"bad index (%d) in \"setTire:atIndex\"",

		      index);

		exit(1);

	}

	tires[index] = m_tire;

}

- (void) print

{

	NSLog(@"%@",engine);

	NSLog(@"%@",tires[0]);

	NSLog(@"%@",tires[1]);

	NSLog(@"%@",tires[2]);

	NSLog(@"%@",tires[3]);

	

}





@end

 

//

//  WeatherRadial.h

//  car4

//

//  Created by Elf Sundae on 10-10-20.

//  Copyright 2010 __MyCompanyName__. All rights reserved.

//



#import <Cocoa/Cocoa.h>

#import "Tire.h"



// *******************

// WeatherRadial Tire

@interface WeatherRadial : Tire

@end



 

 

//

//  WeatherRadial.m

//  car4

//

//  Created by Elf Sundae on 10-10-20.

//  Copyright 2010 __MyCompanyName__. All rights reserved.

//



#import "WeatherRadial.h"



@implementation WeatherRadial



-  (NSString *) description

{

	return (@"I am a WeatherRadial Tire!!");

}



@end

 

 

#import <cocoa/Cocoa.h>

#import "Engine.h"		// 因为V8.h和WeatherRadial.h中				

#import "Tire.h"		// 已经包含Engine.h和Tire.h,此处可不用导入

#import "Car.h"

#import "V8.h"

#import "WeatherRadial.h"





/*

 * car4: 联系组织项目文件 

 *

 */









int main (int argc, const char * argv[]) {



	

	Car *car;

	car = [Car new];

	V8 *engine = [V8 new];

	[car setEngine: engine];





	

	int i;

	for (i = 0; i < 4; i++)

	{

		WeatherRadial *tire = [WeatherRadial new];

		[car setTire:tire :i];

	}



	[car print];

	

	return 0 ;

	

}



你可能感兴趣的:(Objective-C)