您的位置:首页 > 编程语言 > Go语言

Category(分类)

2017-05-23 16:33 127 查看

1、什么是Category

Category也称为分类、类目、类别等,Category可以在不修改原来类的基础上,为这个类补充一些方法

2、Category的格式

通过分类给某类添加方法,分为声明和实现俩部分

分类声明

@interface Person (SS)
-(void)eat;
@end


分类实现

@implementation Person (SS)
-(void)eat{
NSLog(@"%s",__func__);
}
@end


完整例子

@interface Person : NSObject
@property (nonatomic,strong) NSString *name;
-(void)sayName;
@end

@implementation Person
-(void)sayName{
NSLog(@"%@",self.name);
}
@end
--------------------------------------------
@interface Person (SS)
-(void)eat;
@end
@implementation Person (SS) -(void)eat{ NSLog(@"%s",__func__); } @end
--------------------------------------------
#import "Person.h"
#import "Person+SS.h"
int main(int argc, const char * argv[]) {
Person *p = [[Person alloc]init];
p.name = @"ABC";
[p sayName];
[p eat];
}


3、Category的注意事项

分类是用于给原有类添加方法的,它只能添加方法,不能添加属性



分类中的@property,只会生成setter/getter的方法声明,不会生成实现及私有的成员变量

添加@property



通过属性设置,程序会crash



可以在分类中访问原有类中.h的属性

@interface Person : NSObject
@property (nonatomic,strong) NSString *name;
-(void)sayName;
@end
@implementation Person
-(void)sayName{
NSLog(@"%@",self.name);
}
@end
---------------------
@interface Person (SS)
-(void)eat;
-(void)sayName;
-(void)sayHello;
@end
@implementation Person (SS)
-(void)eat{
NSLog(@"%s",__func__);
}
-(void)sayName{
NSLog(@"%s",__func__);
}
-(void)sayHello{
NSLog(@"%@",self.name);
}
@end
-------------------------------
int main(int argc, const char * argv[]) {
Person *p = [[Person alloc]init];
p.name = @"ABC";
[p sayName];
[p eat];
[p sayHello];
}


如果分类中有和原类中同名的方法,程序只会调用分类里的方法,如果多个分类中都有和原类中同名的方法,程序只会由编译器决定,编译器最后一个执行的方法来响应

@interface Person : NSObject
@property (nonatomic,strong) NSString *name;
-(void)sayName;
@end
@implementation Person
-(void)sayName{
NSLog(@"%@",self.name);
}
@end
------------------------------------
@interface Person (SS)
-(void)eat;
-(void)sayName;
@end
@implementation Person (SS)
-(void)eat{
NSLog(@"%s",__func__);
}
-(void)sayName{
NSLog(@"%s",__func__);
}
@end
-------------------------------------
int main(int argc, const char * argv[]) {
Person *p = [[Person alloc]init];
p.name = @"ABC";
[p sayName];
[p eat];
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息