block
来源:互联网 发布:腾讯企业邮箱域名设置 编辑:程序博客网 时间:2024/05/18 03:53
block
- 什么是block
- block的简单应用
- 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作为属性时,要把其内存特性设为copy
2、在使用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:^{ }]; };
1 0
- Block
- block
- Block
- block
- block
- block
- block
- block
- block
- Block
- block
- Block
- Block
- Block
- Block
- block
- Block
- block
- 杭电acm2040
- Java HashMap的工作原理
- jre-java runtime environment
- OC中的属性
- sql 事务
- block
- ubuntu update-alternatives学习(软连接管理)
- Android网络框架之Request、Response类与请求队列(二)
- Nginx参数选项
- 如何申请开发证书和使用Code IDE制作可以真机调试的ipa
- 如何判断一个函数是否是凸的
- JavaScript跨域总结与解决办法
- nginx日志格式说明
- linux 串口编程 用read函数读取数据被截断 怎样一次读完