一,分类的概念及使用流程: 1,什么是分类? 分类,就是Category,是OC特有的语法; Category有很多种翻译: 分类 \ 类别 \ 类目 (一般叫分类)
2,分类的作用: (1),对现有类进行扩展; (2),在不修改原有的类的基础上增加新的方法;
3,分类的使用流程: 先声明类别--->实现类别--->使用类别
二,分类的声明和实现: 1,分类的声明: (1),分类的声明格式: @interface 待扩展的类名 (分类的名称)
@end
(2),在.h文件中,声明分类: @interface ClassName (CategoryName) //只能在分类中添加方法 NewMethod; //不能在分类中添加成员变量 @end
(3),分类声明格式的说明: 1)新添加的方法必须写在 @interface 与@end之间 2)ClassName 现有类的类名 3)CategoryName 待声明的类别名称 4)NewMethod 新添加的方法
2,分类的实现: (1),分类的实现格式: @implementation 待扩展的类 (分类的名称)
@end
(2),在.m文件中实现分类: @implementation ClassName(CategoryName) NewMethod @end
(3),分类实现格式说明: 1)新方法的实现必须写在@implementation与@end之间 2)ClassName 现有类的类名 3)CategoryName 待声明的类别名称 4)NewMethod 新添加的方法的实现
3,分类的使用: (1),导入分类的头文件; (2),使用类别中的方法,和使用一般成员方法一样;需要创建对象,然后用[]调用类别中的方法即可;
三,分类的使用注意事项: 1,分类只能增加方法, 不能增加成员变量、也不能使用@property;***** 2,分类可以访问原来类中的成员变量; 3,如果分类和原来类出现同名的方法, 优先调用分类中的方法, 原来类中的方法会被忽略;***** 4,如果多个分类中有同名的方法,执行哪个分类的方法,取决于编译的顺序,最后编译的那个分类中的方法会执行;
四,非正式协议: 1,非正式协议就是类别,即凡是NSObject或其Foundation框架中的子类的类别,都是非正式协议。
五,延展: 1,什么是延展? 延展又称为扩展(Extension),是Category的一个特例,是匿名的一个分类;
2,延展的声明: //延展的声明 //分类的声明 @interface Student () @interface Student(Creation) @end @end
3,延展的特点: (1),可以在延展中,定义实例变量; (2),没有自己的实现文件,只能在当前类中实现;
4,延展的意义: (1),就是定义私有的方法和私有变量; 六,block的简单用法:
1,block的基本用法: 1) block最简单形式 : 定义格式: void (^block名)() = ^{代码块;}
使用格式: block名();
例如: 定义一个block: void (^myBlock)() = ^ { NSLog(@"hello"); };
调用block: myBlock(); 2),带有参数的block的定义和使用: 定义格式: void (^block名称)(参数列表) = ^ (参数列表) { // 代码实现; }
例如: //定义有参数的block void (^sumBlock)(int, int) = ^ (int x, int y) { NSLog(@"%d", x + y); }; //调用block sumBlock(10, 20);
3),带有参数和返回值的block 定义格式: 返回类型 (^block名称)(参数列表) = ^ 返回类型 (参数列表) { // 代码实现; } 例如: //定义有返回值和参数的block int (^sumBlock2)(int, int) = ^ int (int a, int b) { return a + b; };
//调用有返回值的block NSLog(@"%d", sumBlock2(4, 8));
|