概述
1 分类(category)
作用
1)不修改类的源文件 增加方法。
2)将庞大的类分成若干模块开发
3)将庞大的类由多人开发
目的
1) 对现有类进行扩展
2) 作为子类的替代手段
3) 对类的方法进行归类
实现
1) 声明分类
格式: @interface 待扩展的类名(分类名称)
方法声明;
@end
@interfacePerson(base)
方法声明;
@end
2) 实现分类
格式 : @implementation 待扩展的类 (分类名称)
方法的实现;
@end
@implementation Person (base)
方法的实现;
@end
3) 使用方法和普通方法一样。
注意
1) 分类文件的命名:类名+分类名 (Person+base)
2) 只能增加方法,不能增加成员变量。
3) 可以访问原类的成员变量
4) 如果分类中出现和原类同名方法,优先使用分类中的方法。
5) 多个分类中有同名方法,使用最后编译的同名方法。
2 分类与非正式协议
非正式协议是类别,是NSObject或其子类增加的分类。
3 延展类别(extension)
延展是分类名为空的分类。(匿名类别)
为类增加类没有的成员变量 方法或者合成属性
只有一个单独的头文件。实现是在类的原文件中实现。
1) 声明
格式: @interface 待扩展的类名()
{
成员变量列表
}
方法声明;
@end
@interfacePerson()
{
int age;
}
方法声明;
@end
注意
1) 可以在延展中添加实例变量
2) 不能在用@implementation在延展中实现,只能在原类中实现
3) 方法不能被子类继承。(私有方法)
4) 使得OC中有了相对私有的方法。
4 @block
对比函数学习
定义
用^声明block类型
int (^myBlock)(int)=^(int num){
}
第一个int:返回值类型
^myBlock:声明这是一个block类型变量名为myBlock
(int) :参数类型
(int num):参数类型及参数
无参无返回值
void (^myBlock)()=^(){ //没有参数的时候小括号可以省略
代码块语句;
}
有参无返回值
void (^myBlock)(int num)=^(int num){ //参数之间用逗号分隔
printf(“%d”,num);
}
使用
myBlock();//括号内输入实参。
block与typedef
给block起别名
格式 typedef int (^myBlock)(int); //类似函数指针
可以用myBlock定义其他返回值 类型相似的blokc
block访问外部变量
可以访问外部变量。
当block访问外部变量的时候会把变量以const形式赋值,存在block所在的内存中(堆区),值不可改变。
block内部可以定义变量存在栈区
在block内部 __block修饰外部变量 可以对外部变量的值进行修改。
内存空间还是在堆区。
如果变量是全局变量在block中可以直接修改。
block变量作为函数返回值
1) 用typedef 定义block的新类型
2) 用新类型作为函数的返回值类型
3) 用新类型定义变量接收返回值
4) 变量后加()调用返回的block
block使用技巧
助记符:inLineBlock
最后
以上就是勤恳柠檬为你收集整理的学习笔记13-OC@category+@block的全部内容,希望文章能够帮你解决学习笔记13-OC@category+@block所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复