扩展:
1.子类 subclass
2.分类 Category
3.Extension
4.Protocol
Category
Category 也叫类名或类目
只要作用:
在 没有源代码 的类加方法,但是不可以加实例变量 扩展系统 第三方
通过 Category 添加的方法会成为原类的一部分,从而达到扩展一个类的功能
如何添加 Category 的方法:
1.新建文件
2.选择Objective-C Category 模板
3.填写类名和分类名
4. .h 文件添加方法声明
5. .m 文件添加方法实现
例如:添加 NSString 的方法
声明:
NSString+sayHi.h 文件
@interface NSString(sayHi)
- (void)sayHi;
@end
实现:
NSString+SayHi.m 文件
#import “ NSString+SayHi.h ”
@implementation NSString(SayHi)
- (void) sayHi
{
NSLog(@ ” 这是通过 category 为 NSString 添加的 hi 方法 ” ) ;
}
1.子类 subclass
2.分类 Category
3.Extension
4.Protocol
Category
Category 也叫类名或类目
只要作用:
在 没有源代码 的类加方法,但是不可以加实例变量 扩展系统 第三方
通过 Category 添加的方法会成为原类的一部分,从而达到扩展一个类的功能
如何添加 Category 的方法:
1.新建文件
2.选择Objective-C Category 模板
3.填写类名和分类名
4. .h 文件添加方法声明
5. .m 文件添加方法实现
例如:添加 NSString 的方法
声明:
NSString+sayHi.h 文件
@interface NSString(sayHi)
- (void)sayHi;
@end
实现:
NSString+SayHi.m 文件
#import “ NSString+SayHi.h ”
@implementation NSString(SayHi)
- (void) sayHi
{
NSLog(@ ” 这是通过 category 为 NSString 添加的 hi 方法 ” ) ;
}
@end
Extension
Extension 的主要作用是:为类添加一个”私有”方法 和 “私有”变量
Extension 针对的是自己的类,必须有源代码的类
它只在. m 文件中实现
定义:
xxx.m 文件
//括号里什么都不写 可以加私有变量 但是要是在里面写东西的话就是不能添加私有变量
@interface xxx (ExtensionName)
//你的方法列表
@end
实现:
@implementation xxx
//方法实现
@end
Protocol
protocol 又名协议
协议是一套标准(一堆方法的声明),只有 .h 文件
接受协议的对象实现协议定义的方法
协议中的方法是默认的是必须要实现的,即@required (这个关键字可以不写)
关键字@optional 修饰的方法是可选的,可实现也可不实现
以@protocol 开始,以@end结束
总结它的用法和用途:
协议的 .h 文件中只有声明,实现要在谁要遵守这个协议的类的 .m 文件中写实现方法, .h 文件中要先引入这个协议
例如:
在类的 .m 文件中
如果有个类是定协议的一方,其他类要遵守这个字协议,
那么这个类中也要创建一个实例变量---是一个满足我协议对象就能成为这个类的一部分.,而且还要写一个实现方法,以便在main 函数中调用满足我协议的对象.
这个类的 .h 文件也要引用这个协议但不要遵守
例子: