1、扩展与类别相似,相当于匿名类别,定义扩展的语法格式如下:
@interface 已有类 ()
{
//实例变量
}
//方法定义
...
@end
2、与类别的区别:
类别通常有单独的.h和.m文件,扩展则用于临时对某个类的借口进行扩展,类实现部分同时实现类接口部分定义的方法和扩展中定义的方法,即扩展只有单独的.h文件,而没有.m文件,扩展中定义的属性和方法,在类的.m中实现
3、实例
1)类的头文件FKCar.h
#import <Foundation/Foundation.h>
// 定义类的接口部分
@interface FKCar : NSObject
@property (nonatomic , copy) NSString* brand;
@property (nonatomic , copy) NSString* model;
- (void) drive;
@end
2)类扩展的头文件FCCar+dirve.h
#import "FKCar.h"
// 定义FKCar的扩展
@interface FKCar ()
@property (nonatomic , copy) NSString* color;
- (void) drive:(NSString*)owner;
@end
3)类的实现文件FKCar.m
#import "FKCar+drive.h"
// 为FKCar提供实现部分
@implementation FKCar
@synthesize brand;
@synthesize model;
@synthesize color;
- (void) drive;
{
NSLog(@"%@汽车正在路上奔驰" , self);
}
- (void) drive:(NSString*) owner
{
NSLog(@"%@正驾驶%@汽车在路上奔驰" , owner , self);
}
- (NSString*) description
{
return [NSString stringWithFormat:@"<FK[brand=%@,model=%@,color=%@]>"
, self.brand , self.model ,self.color];
}
@end
4)使用
#import <Foundation/Foundation.h>
#import "FKCar+drive.h"
int main(int argc , char * argv[])
{
@autoreleasepool{
// 创建一个FKCar对象
FKCar* car = [[FKCar alloc] init];
// 使用点语法为car对象的属性赋值
car.brand = @"宝马";
car.model = @"X5";
car.color = @"黑色";
// 调用car的方法
[car drive];
[car drive:@"孙悟空"];
}
}