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]; }
相关文章推荐
- Objective-C分类 (category)和扩展(Extension)
- OC分类(Category)的作用和注意事项
- 黑马程序员——OC学习之分类category的使用
- ——黑马程序员——OC中的分类(Category)总结
- 【黑马程序员】OC-分类(Category)及延展(Extendsion)
- 黑马程序员------[Objective-C]分类-Category
- 分类(category)的概念与使用
- iOS 分类(category)、扩展(Extension)
- OC中分类(Category)和扩展(Extension)
- Category分类的基本使用
- 给分类(Category)添加属性
- Objective-C,ios,iphone开发基础:分类(category,又称类别)
- iOS开发-在分类(Category)文件中添加属性
- Objective-C:继承、分类(Category、extension)、协议(protocol),个人理解,仅供参考
- 黑马程序员---OC学习笔记之分类(Category)非正式协议【重点】
- 深入浅出理解分类(category)和类扩展(extension)
- iOS开发中常用的分类方法---UIImage+Category
- Object-C 分类(Category) 和 扩展(Extension)
- 利用运行时关联(runtime)给分类(Category)中的属性存值.
- ZenCart分类数量打折Category Quantity Discount插件