黑马程序员——OC学习——Category
来源:互联网 发布:在淘宝买黄金靠谱吗 编辑:程序博客网 时间:2024/05/16 12:22
------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1. 分类(Category)
分类的作用
- 在不修改原有类的基础上增加新方法
- 一个庞大的类可以分模块开发
- 一个庞大的类可以由多个人来写,有利于团队合作
- 在不修改原有类的基础上增加新的方法,对原有类进行扩展,并且在category中增加的方法可以被子类继承
- 作为子类的替代手段,OC中的继承是单继承,一个类不能继承多个父类,可以通过类别向已有的类里增加方法
- 对类中的方法进行分类,利用category把一个庞大的类划分为小块来分别进行开发,可以从而对类中的方法进行更新和维护
分类的声明:
@interface 待扩展的类名 (分类的名称)
//方法的声明
@end
eg: @interface Person (base)
-(void)eat;
@end
分类的实现:
@implementation 待扩展的类名 (分类的名称)
//方法的实现
@end
eg:@implementation Person (base)
-(void)eat{
NSLog(@"xxxxxxxxxxx");
}
Category使用示例代码如下:
//声明一个分类#import "Person.h"@interface Person (base)//分类中方法的声明-(void)eat;-(void)run;@end//分类的实现#import "Person+base.h"@implementation Person (base)//分类中方法的实现-(void)eat{ NSLog(@"人正在吃饭");}-(void)run{ NSLog(@"人正在跑步");}@end//使用分类中的方法int main(int argc, const char * argv[]) { @autoreleasepool { Person *p=[Person new]; //调用分类中的方法 [p eat]; [p run]; } return 0;}
分类使用注意事项:
分类只能增加方法,不能增加成员变量,也不能使用@property
可以在分类中访问原来的成员变量
分类和原来类方法同名时,会覆盖类中同名的方法
在多个类别中有同名方法时,执行的是最后编译的那个类别的同名方法
分类和继承的区别:
分类不能扩展属性,而继承可以
必须要使用继承的两种情况:
a. 需要扩展的方法和原方法同名时,并且需要调用原来类中的同名方法时,只能使用继承,而不能使用分类,否则分类会覆盖原方法的实现,访问不到原方法。
b. 扩展属性时只能使用继承
非正式协议:
非正式协议是类别,是给Foundation框架中NSObject类或其子类建立的类别。
延展(Extension)
Extension是分类的一个特例,是匿名的分类。
Extension和Category的区别:
a. Extension中可以定义实例变量,而分类不可以
b. Extension中定义的方法必须实现,而分类不做要求
c. Extension没有独立的实现部分,延展声明方法的实现必须在对应类的实现文件中实现
延展实现方法的相对私有化。但是当别的头文件引入延展的头文件时,在这个文件中定义的类对象就可以直接调用在延展中定义的私有方法。
延展的示例代码如下:
//延展的头文件#import "Person.h"@interface Person ()@property (nonatomic,assign) int weight;-(void)work;@end//在对应类的实现文件中实现延展中声明的方法#import "Person.h"#import "Person_work.h"@implementation Person-(void)work{ Person *p=[Person new]; p.weight=100; NSLog(@"weight=%d的人正在工作",p.weight);}-(void)test{ //用self调用私有方法 [self work];}@end//使用延展中的方法int main(int argc, const char * argv[]) { @autoreleasepool { Person *p=[Person new]; //通过调用类对外公开的方法,使用私有方法 [p test]; } return 0;}
- 黑马程序员——OC学习——Category
- 黑马程序员——OC—构造方法和Category
- 黑马程序员13——OC语言之Category
- 黑马程序员——OC的Category和Protocol
- 黑马程序员—— OC加强---ARC+Category+Block
- 黑马程序员——OC之Category、Block
- 黑马程序员——OC学习之分类category的使用
- 黑马程序员——OC基础学习(五)---分类(Category),代码块Block和protocol代理设计模式
- 黑马程序员—OC学习摘要
- 黑马程序员——OC热身——Category、Protocol、Block、常用结构体
- 黑马程序员——OC基础——category、description和SEL
- ——黑马程序员——OC中的分类(Category)总结
- 黑马程序员——OC基础:block和Protocol及Category
- 黑马程序员——OC基础---核心语法(id,构造方法,Category,description,SEL)
- 黑马程序员—IOS基础之OC—ARC和Category
- 黑马程序员——OC基础---分类(Category)、非正式协议及分类延展
- oc学习笔记3—— category
- 黑马程序员——OC学习笔记01 OC基础知识。
- 用Python和OpenCV创建一个图片搜索引擎的完整指南
- BZOJ 2243 染色(树链剖分+线段树)
- NOIP2015提高组Day1斗地主
- BS总结
- JAVA编程思想导论(猜字谜游戏1.0)
- 黑马程序员——OC学习——Category
- python核心编程-reduce函数
- Boxfilter 块滤波器
- MySql重装或者重新配置数据库实例时遇到“本地计算机无法启动Mysql服务”错误的解决方法
- Android@id和@+id区别
- layout设置出现和隐藏动画
- C++子类在成员函数中不要转型为父类
- Android触摸事件处理机制之requestDisallowInterceptTouchEvent
- java小说上传到txt功能实现(相同的小说不能再次添加)