分类(Category)
-
在.h文件中声明类别
-
1)新添加的方法必须写在 @interface 与 @end之间
-
2)ClassName 现有类的类名(要为哪个类扩展方法)
-
3)CategoryName 待声明的类别名称
-
4)NewMethod 新添加的方法
@interface ClassName (CategoryName) NewMethod; //在类别中添加方法 //不允许在类别中添加变量 @end
-
注意: 1)分类只能增加方法, 不能增加成员变量
2)分类中写property只会生成getter/setter方法声明
3)分类可以访问原来类中的成员变量
4)如果分类和原来类出现同名的方法, 优先调用分类中的方法, 原来类中的方法会被忽略
-
方法调用的优先级(从高到低)
- 分类(最后参与编译的分类优先)
- 原来类
- 父类
5)多个分类中有同名方法,则执行最后编译的文件方法(注意开发中千万不要这么干)
-
在.m文件中实现类别:
- 1)新方法的实现必须写在@ implementation与@end之间
- 2)ClassName 现有类的类名
- 3)CategoryName 待声明的类别名称
- 4)NewMethod 新添加的方法的实现
@implementation ClassName(CategoryName)
NewMethod
... ...
@end
- 运用
#import "NSString+NJ.h"
@implementation NSString (NJ)
-(int)count{
int number=0;
for (int i= 0; i< self.length; ++i) {
//self在对象方法就是当前调用该方法的对象
unichar c=[self characterAtIndex:i];
if(c>='0'&& c<='0');
number ++;
}
}
@end
//main.m
NSString *str=@"fds64jkl43fjdslkf";
int count =[NSString countWithStr:str];
类扩展(Class Extension)
-
延展类别又称为扩展(Extendsion),Extension是Category的一个特例
-
可以为某个类扩充一些私有的成员变量和方法
写在.m文件中
@interface 类名 ()
@end
- 对比分类, 就少了一个分类名称,因此也有人称它为”匿名分类”