OC基础(19)
2015-12-03 20:16
330 查看
类扩展(Class Extension)
Block基本概念
typedef和Block
Block注意事项
【理解】类扩展书写格式
可以为某个类扩充一些私有的成员变量和方法
写在.m文件中
英文名是Class Extension
> 对比分类, 就少了一个分类名称,因此也有人称它为”匿名分类”
【理解】block的格式
Block是苹果官方特别推荐使用的数据类型, 应用场景比较广泛
动画
多线程
集合遍历
网络请求回调
Block的作用
用来保存某一段代码, 可以在恰当的时间再取出来调用
功能类似于函数和方法
block最简单形式
block带有参数的block的定义和使用
带有参数和返回值的block
调用Block保存的代码
【掌握】block和typedef
函数指针别名
int main(int argc, const char * argv[]) {
int (^sumBlock) (int, int) = ^(int value1, int value2){ return value1 + value2; };
int res = sumBlock(10 , 20); NSLog(@"res = %i", res);
int (^minusBlock) (int, int) = ^(int value1, int value2){ return value1 - value2; };
res = minusBlock(10 , 20); NSLog(@"res = %i", res); return 0;
}
block别名
block内部也可以定义和block外部的同名的变量(局部变量),此时局部变量会暂时屏蔽外部
默认情况下, Block内部不能修改外面的局部变量
Block内部可以修改使用__block修饰的局部变量
Block基本概念
typedef和Block
Block注意事项
类扩展(Class Extension)
本小节知识点:
【理解】什么是类扩展【理解】类扩展书写格式
1.什么是类扩展
延展类别又称为扩展(Extendsion),Extension是Category的一个特例可以为某个类扩充一些私有的成员变量和方法
写在.m文件中
英文名是Class Extension
2.类扩展书写格式
@interface 类名 () @end
> 对比分类, 就少了一个分类名称,因此也有人称它为”匿名分类”
Block基本概念
本小节知识点:
【了解】什么是Block【理解】block的格式
1.什么是Block
Block是iOS中一种比较特殊的数据类型Block是苹果官方特别推荐使用的数据类型, 应用场景比较广泛
动画
多线程
集合遍历
网络请求回调
Block的作用
用来保存某一段代码, 可以在恰当的时间再取出来调用
功能类似于函数和方法
2.block的格式
Block的定义格式返回值类型 (^block变量名)(形参列表) = ^(形参列表) { };
block最简单形式
void (^block名)() = ^{代码块;} 例如: void (^myBlock)() = ^{ NSLog(@"李南江"); };
block带有参数的block的定义和使用
void (^block名称)(参数列表) = ^ (参数列表) { // 代码实现; } 例如: void (^myBlock)(int) = ^(int num){ NSLog(@"num = %i", num); };
带有参数和返回值的block
返回类型 (^block名称)(参数列表) = ^ (参数列表) { // 代码实现; } 例如: int (^myBlock)(int, int) = ^(int num1, int num2){ return num1 + num2; };
调用Block保存的代码
block变量名(实参);
typedef和Block
本小节知识点:
【了解】函数指针回顾【掌握】block和typedef
1.函数指针回顾
函数指针使用int sum(int value1, int value2) { return value1 + value2; } int minus(int value1, int value2) { return value1 - value2; } int main(int argc, const char * argv[]) { int (*sumP) (int, int) = sum; int res = sumP(10, 20); NSLog(@"res = %i", res); int (*minusP) (int , int) = minus; res = minusP(10, 20); NSLog(@"res = %i", res); return 0; }
函数指针别名
typedef int (*calculate) (int, int); int main(int argc, const char * argv[]) { calculate sumP = sum; int res = sumP(10, 20); NSLog(@"res = %i", res); calculate minusP = minus; res = minusP(10, 20); NSLog(@"res = %i", res); return 0; }
2.block和typedef
block使用int main(int argc, const char * argv[]) {
int (^sumBlock) (int, int) = ^(int value1, int value2){ return value1 + value2; };
int res = sumBlock(10 , 20); NSLog(@"res = %i", res);
int (^minusBlock) (int, int) = ^(int value1, int value2){ return value1 - value2; };
res = minusBlock(10 , 20); NSLog(@"res = %i", res); return 0;
}
block别名
int main(int argc, const char * argv[]) { calculateBlock sumBlock = ^(int value1, int value2){ return value1 + value2; }; int res = sumBlock(10, 20); NSLog(@"res = %i", res); calculateBlock minusBlock = ^(int value1, int value2){ return value1 - value2; }; res = minusBlock(10, 20); NSLog(@"res = %i", res); return 0; }
Block注意事项
本小节知识点:
【掌握】Block注意事项1.Block注意事项
在block内部可以访问block外部的变量int a = 10; void (^myBlock)() = ^{ NSLog(@"a = %i", a); } myBlock(); 输出结果: 10
block内部也可以定义和block外部的同名的变量(局部变量),此时局部变量会暂时屏蔽外部
int a = 10; void (^myBlock)() = ^{ int a = 50; NSLog(@"a = %i", a); } myBlock(); 输出结果: 50
默认情况下, Block内部不能修改外面的局部变量
int b = 5; void (^myBlock)() = ^{ b = 20; // 报错 NSLog(@"b = %i", b); }; myBlock();
Block内部可以修改使用__block修饰的局部变量
objc __block int b = 5;
void (^myBlock)() = ^{ b = 20;NSLog(@"b = %i", b); };
myBlock();
输出结果: 20
相关文章推荐
- 螺旋模型
- zoj 2587 Unique Attack 最小割判定
- HDU - 1232 畅通工程(并查集)
- 关于Hibernate一个配置参数hibernate.hbm2ddl.auto
- PHP中的错误
- 读代码大全2——第一章和第二章
- bzoj1086 王室联邦 dfs
- 增量模型
- 快速原型模型
- HDU - 1754
- 关于嵌入文本框设置只读后,后台获取不到值--解决办法
- [置顶] Spring MVC POST中文乱码解决方案
- Linux 下iptables相关配置
- Android获取Bluetooth设备信号RSSI值得流程
- OpenCV相机标定calibrateCamera坐标系详解
- Post同步异步
- if switch练习(体重)
- 迭代模型
- CodeForces - 27E--Number With The Given Amount Of Divisors(反素数)
- 【PHP7】- 编译安装与新特性初体验