Block 我的理解
来源:互联网 发布:淘宝双十一红包不中 编辑:程序博客网 时间:2024/05/18 02:39
1.块
Block(块)是iOS4.0新增的一种C语言特性。 块 是匿名函数,可接受参数以及返回值,执行时能够捕获运行时状态。另外,块实际上是 Objective-C对象,因此可以作为参数传递,可存储在Foundation数组,字典和集合中,可使用手动管理内存或者ARC。最后,块 可修改当前词法作用域内的对象。
实际上,块被广泛用于替代委托和技术处理程序(completion handler):不必提供指定委托的属性,添加协议定义,实现协议方法并设计将状态变量传递给委托方法的机制,而在块中实现委托逻辑。
2.声明和使用块
//Block声明:@property (strong,nonatomic)NSString * (^repeatString)(int,NSString *);//Block实现:self.repeatString=^NSString * (int numTimes,NSString * repeat){ NSMutableString * retString =[[NSMutableString alloc]init]; for (int i=0; i<numTimes; i++) { [retString appendString:repeat]; } return [NSStringstringWithString:retString]; }; NSString * repeatTest =self.repeatString(5,@" ok "); NSLog(@"%@",repeatTest);//输出结果: ok ok ok ok ok
3.使用块捕获状态
NSString * bloctStr =@" BlockTest ";self.repeatString = ^NSString * (int numTimes){ NSMutableString * retString =[[NSMutableStringalloc]init]; for (int i=0; i<numTimes; i++) { [retString appendString:bloctStr];} return retString;}; bloctStr=@"BlockTest Change"; NSString * repeatTest =self.repeatString(3); NSLog(@"%@",repeatTest);//输出结果: BlockTest BlockTest BlockTest
要让这个块能够使用这个变量的最新值或直接修改这个变量的值,可在声明这个变量时,使用限定符__block,这表明块,可以直接访问这个变量,而不是在块赋值时捕获这个变量的值。
@property (strong,nonatomic)void (^repeatString)(int);__block NSString * bloctStr =@" BlockTest ";self.repeatString=^(int numTimes){ NSMutableString * retString =[[NSMutableStringalloc]init]; for (int i=0; i<numTimes; i++) { [retString appendString:bloctStr]; } bloctStr=retString; }; bloctStr=@"BlockChange "; self.repeatString(3); NSLog(@"%@",bloctStr);//输出结果: BlockChange BlockChange BlockChange
4.将 块 用作方法参数
一种常见的情形是,将块用作长时间运行的任务或异步任务的结束处理程序。为此,必须首先声明一个将结束块作为参数的方法。
- (void)viewDidLoad { [superviewDidLoad]; [self.longRuningTaskWithCompletionHandler:^{ NSLog(@"KTBlock !"); }];}-(void)longRuningTaskWithCompletionHandler:(void(^)(void))completionBlock{//void(^)(void) 是参数(block)类型 if (completionBlock) { completionBlock(); }};
5.内存,线程和块
未完待续。。。
0 0
- Block 我的理解
- 我对IOS中代理和block的理解
- Block的简单理解
- 对block的理解
- 对block的理解
- iOS block的理解
- 对 block 的理解
- block 的一些理解
- 我的代理,block
- block级锁的理解
- block/extent/segment的理解
- block和split的理解
- block块的一些理解
- iOS 对于block的理解
- OC block变量的理解
- iOS笔记-(Block的理解)
- 深入理解ObjetiveC的Block
- Block的一些简单理解
- Android Studio高效配置
- HTML之表单
- 1、编写程序,分别用二分法和牛顿迭代法求解方程x3 – 3x – 1 = 0在x = 2附近的实根,要求计算精确到小数点后七位数字为止,并将求出的近似结果与理论值2cos20 相比较,二分法的初始迭代
- 优秀站点汇总
- python 编码问题:'ascii' codec can't encode characters in position 的解决方案
- Block 我的理解
- Linux下用python脚本批量修改文件名
- Python实现京东价格监控
- chrome CEF3 IE设置影响网页速度的问题
- Android Studio强制审核图片格式会报错怎么去除审核?
- iOS - Json解析数据精度丢失处理
- Android中JNI编程详解
- HBase常用命令
- js 原型 [图]