类目:
定义:为现有工程中的类和系统类添加新的方法
作用:在类目中添加新的方法及属性和在原类中添加方法和属性是一样的,都能够被类和该类的子类调用.这样可以快速便利维护和开发项目
类目创建的方法
1.原类中添加
也就是在.h中添加多一个@interface 在.m中添加多一个@implementation
#import <Foundation/Foundation.h>
@interface Tool : NSObject
{
NSString *_name;
}
@property(nonatomic,strong)NSString *property1;
-(void)function1;
@end
@interface Tool (ToolCategory)//原类名(类目名)
@property(nonatomic,strong)NSString *property2;
-(void)function2;
@end
#pragma mark --类目--
//在类目中为原类添加新的方法和属性
/*
类目的使用场景
1.类包含很多个方法实现,而这些方法需要不同团队成员来实现
2.当你在使用基础类库中的类时,你不想继承这些类而指向添加一些方法
使用类目的时候要注意的问题
1.类目可以访问原始类的实例变量,但不能添加实例变量,如果想添加变量,那就要通过继承创建子类来实现.
2.类目可以重载原始类的方法,但不推荐这么做,这样会覆盖原始类的方法,如果确实要重载,那就通过继承创建子类来实现
3.和普通接口有所区别的是,在类目的实现文件中的实例方法只要你不去调用它你可以不用实现所有声明的所有方法.
*/
#import "Tool.h"
#import <objc/runtime.h>
@implementation Tool
-(void)function1{
NSLog(@"I am function1");
}
@end
@implementation Tool (ToolCategory)
-(void)function2{
NSLog(@"%@",_name);
NSLog(@"I am function2");
}
在创建类目时不可添加属性,但若真的要添加,会比较麻烦,所以在此不添加!!
2.创建一个类来继承原类
选择OC File
File Type选择Category(类目) Class选择所要继承的原类
这时候就会多出两个文件,分别为.h和.m文件
剩下的步骤与以前声明方法,实现方法一样(在ViewController.m中记得导入类目)
其实就像新建一个类,然后声明方法,实现方法,只不过这个类是继承某个类而且是不能添加属性而已!!!!!
非正式协议
/*
非正式协议: NSObject 的类目声明成为非正式协议.创建一个NSObject的类目而不实现称为”创建一个非正式协议”
*/
创建的过程与上述方法差不过
选择OCFile
File Type选择Category(类目) Class选择NSObject
值得注意的是非正式协议只声明方法,而不去实现
实现方法需在其他类中
过程:
1.将非正式协议头文件.h导入某类中的.h文件中
2.在这个类中实现非正式协议所声明的方法
延展的创建
/*
延展
延展的作用就是定义自己的私有方法
*/
1.在某类中的.m中添加一个@interface,然后声明方法
2.声明的方法为私有的,只能在本类中的方法中去实现
#import "Myclass.h" //这是在Myclass的.m文件中
@interface Myclass ()
-(void)testExtension; //这是延展声明的方法
@end
@implementation Myclass
-(void)test{
[self testExtension]; //因为延展的方法是私有的所以需在本类的方法中去实现
}
-(void)testExtension{
NSLog(@"我是延展testExtension");
}
2.延展出一个.h文件,然后导入某类的.m文件中去实现
创建过程
选择OCFile文件
File Type选择Extension(延展) Class选择所要延展的类
这时候就会出现如图中的一个Extension.h文件
在Extension.h文件中声明方法
将Extension.h文件导入带延展类的.m文件中去
其他步骤就跟实现方法一样
(延展出来的Extension.h文件就像以往创建一个类中的.h文件一样)