block
2015-03-01 17:48
351 查看
block
什么是blockblock的简单应用
block的适用范围
block的注意事项
1.什么是blcok
block就是弥补了 指向函数的指针 不能够直接保存一个函数体(代码块)2.blcok的简单应用
(1)无参数无返回值的block// 定义一个没有参数没有返回值的block void (^block)(void) = ^{ NSLog(@"My name is block"); }; // block的调用 block();
(2)有参数无返回值的block
// 定义一个有参数没有返回值的block void (^block)(int) = ^(int num) { NSLog(@"我今年%d岁了", num); }; // block的括号中可以填入参数 block(20);
(3)无参数有返回值的block
// 定义一个无参数有返回值的block int (^block)() = ^{ return 10; }; // 打印这个block的值 NSLog(@"%d", block());
(4)有参数有返回值的block
// 定义一个有参数有返回值的block int (^block)(int, int) = ^(int a, int b) { return a + b; }; // 打印这个block的值 NSLog(@"%d", block(3, 4));
3.block的适用范围
1、block可以用于页面之间传值2、block可以用于简化代码,增加代码的重用性
4.block的注意事项
1、在使用block作为属性时,要把其内存特性设为copy2、在使用block修改block外部的局部变量时,要在该局部变量前加__block关键字(如下代码1)
3、在使用block中如果想调用self关键字时,要对该用一个__weak指针指向self,再在block中调用__weak指针,避免循环引用(如下代码2)
代码1
// 如果想要改变,block代码块之外的变量值,就必须在变量前加入 // __block关键字 __block int x = 0; int (^sumBlock)(int a, int b) = ^int (int a, int b) { int result = (a * b); x = result; return result; }; sumBlock(1, 2); NSLog(@"%d", x);
代码2
// __weak关键字修饰的指针指向self __weak ViewController *view = self; void (^block)() = ^{ // 在block中使用被__weak关键字修饰过的指针,可以避免循环引用 // 因为block会将其内部的对象变成强引用,会出现循环引用的状态 [view presentViewController:view1 animated:YES completion:^{ }]; };
相关文章推荐
- consistent get,db block get
- Block动画
- inline-block基线对布局的影响&vertical-align&vertical-align等应用
- 在atlas(ajax)中请不要使用Response.Write,请使用ClientScript.RegisterClientScriptBlock替换
- block回调实例
- 内核通知链-notifier_block
- _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
- Block详解
- theano sparse_block_dot
- Authorization and Profile Application Block 1.0研究总结
- Block 回调解析
- __block 与 __weak的区别理解
- Ruby,Block,CPS 和 call/cc
- Block
- block 入门
- 利用Enterprise Library中的Security Application Block来处理特殊用户权限
- OC基础——ARC和Block
- 在 IBM LinuxONE 云端平台执行 Blockchain Marbles App
- Linux那些事儿之我是Block层(4)浓缩就是精华?(一)
- IOS开发---OC语言-㉙内存管理:block的使用