一、关于block

1、block的作用:保存一段代码。

2、苹果官方推荐的一种语法,类似于C语言的函数,但是比函数更加灵活。

3、^是block语法的标识。

二、block的用法

1)无返回值无参数

  

 1 - (void)myFirstBlock
 2 {
 3     //1.定义block
 4     void (^myblock)() = ^{
 5         NSLog(@"无参数无返回值");
 6     };
 7     //2.调用block
 8     myblock();
 9
10 }

输出结果:

2016-02-18 09:56:50.124 01-block[750:25107] 无参数无返回值

2)有参数没有返回值

- (void)mySecondBlock
{//1.定义blockvoid (^mySecondBlock)(int,int) = ^ (int num1,int num2){NSLog(@"有参数无返回值:%d",num1 + num2);};//2.调用blockmySecondBlock(2,3);
}

输出结果:

2016-02-18 10:03:22.221 01-block[811:30160] 有参数无返回值:5

3)有参数有返回值

 1 - (void)myThirdBlock
 2 {
 3     //1.定义block
 4     double (^myThirdBlock)(double,double) = ^ (double r1,double r2){
 5         return r1 + r2;
 6     };
 7     //2.调用block
 8      double r3 = myThirdBlock(1.1,2.2);
 9     NSLog(@"有参数有返回值:%f",r3);
10 }

输出结果:

2016-02-18 10:06:42.615 01-block[861:32505] 有参数有返回值:3.300000

三、block语法的格式

四、block的注意点

1)Block内部可以访问外部变量;

2)默认情况下,Block内部不能修改外部的局部变量

3)给局部变量加上__block关键字,则这个局部变量可以在block内部进行修改

示例代码如下:

1 - (void)myFourBlock
2 {
3     int num = 5;
4     void (^myFourBlock)() = ^{
5
6         num = 6;
7         NSLog(@"%d",num);
8     };
9 }

如果写成上面的代码,Xcode会在第六行“num = 6;”报错:missing __block type specifier;

修改代码如下:

- (void)myFourBlock
{__block int num = 5;void (^myFourBlock)() = ^{num = 6;NSLog(@"%d",num);};myFourBlock();
}

输出结果:

2016-02-18 10:25:02.195 01-block[1016:45943] 6

代码虐我千百遍,我待代码如初恋!

转载于:https://www.cnblogs.com/fengzhihao/p/5197371.html

关于OC中的block自己的一些理解(一)相关推荐

  1. 关于OC中的block自己的一些理解(二)

    一.block延伸:页面间反向传值 1)first页面的代码 - (void)viewDidLoad {[super viewDidLoad];[self setupBtn];self.view.ba ...

  2. OC中的Block属性

    Block是苹果极力推荐使用的一个知识点,它的简单实用使其在最近几年变的特别流行,尤其是在不同类之间传值的时候,比通过代理实现要方便得多.OC中的block可以借助C中的函数指针来理解,原理基本类似, ...

  3. 浅析OC中的block

    一.Block 带有 自动变量/局部变量 的匿名函数叫做 block ,又叫做 匿名函数 .代码块 . 完整形式的 Block 语法与一般的 **C语言 **函数定义相比,仅有两点不同: 没有函数名 ...

  4. 浅谈OC中Block的本质

    Block简介 block是将函数及其执行上下文封装起来的一个对象 在block实现的内部,有很多变量,因为block也是一个对象 其中包含了诸如isa指针,imp指针等对象变量,还有储存其截获变量的 ...

  5. OC中Block基本使用

    Block的说明 Block是OC语言中的一种数据类型,它是预先准备好的代码,在需要的时候就直接执行的.可以当做参数传递,也可以当做返回值,一般在实际开发中前者用的比较多.在多线程和网络也使用得相当频 ...

  6. OC中的NSArray和NSMutableArray、NSDictionary和NSMutableDictionary用法

    一:NSArray 和NSMutableArray 1: NSArray:不可变数组 NSArray是OC中使用的数组,只能用来存放OC对象,不能存放非OC对象如基本数据类型 它使不可变的,一旦初始化 ...

  7. iOS开发几年了,你清楚OC中的这些东西么!!!?

    iOS开发几年了,你清楚OC中的这些东西么!!!? 前言 几年前笔者是使用Objective-C进行iOS开发, 不过在两年前Apple发布swift的时候,就开始了swift的学习, 在swift1 ...

  8. Objective-C中的Block

    1.Block定义 可以用一句话来表示Block:带有自动变量(局部变量)的匿名函数. 在iOS中使用"^"来声明一个Block.Block的内容是包含在"{}" ...

  9. OC中数组排序的3种方法

    总结OC中数组排序3种方法:sortedArrayUsingSelector:;sortedArrayUsingComparator:;sortedArrayUsingDescriptors: 大体上 ...

最新文章

  1. react非常适合入门者学习使用的后台管理框架
  2. 处理南通一客户:Fortigate 310B Firmware丢失
  3. python flask源码解析_用尽洪荒之力学习Flask源码
  4. 阿里巴巴Druid数据源,史上最强的数据源,没有之一
  5. 2017年10月05日普及组 约数
  6. idea打印sql的插件_[Mybatis]-[基础支持层]-插件-自定义简易SQL打印插件
  7. linux 没有权限登录,CentOS中让一个用户没有登录权限
  8. 银行喜欢全额还款的客户,还是喜欢最低还款客户?--编辑
  9. PL/SQL中模拟EBS上下文
  10. linux mysql 实战_linux实用实战
  11. js获取数组最大值的索引_数组中最大值的返回索引
  12. 501.二叉搜索树中的众数
  13. 打包巨慢怎么办?这些工具让你爱不释手
  14. 嵌入式行业需要什么样的技术人才?
  15. 高考数学必背公式整理[衡水中学高中数学组]
  16. html5语文答题制作,语文万能答题模板
  17. 苹果MacBook 装双系统win10蓝牙找不到的方法
  18. ARM指令集【 PUSH \POP】【跳转B\BL\BX\BLX \BXJ】【数据操作LDR\LDRB\LDRH\LDM\STR\STRB\STRH\STM】【移位LSL/LSR/ASL/ASR】
  19. 软件工程师资格认证,你合格吗?
  20. 如何使用【微信开发者工具】调试【企业微信】应用网页

热门文章

  1. java读取文件指定位置_java从文件指定位置开始读取文件流
  2. 通过接口给fragment传值_Dataway 4.1.3 发布,开发一个接口不必在编写任何形式的代码,秒级交付!...
  3. python生成时间戳_Python 获取时间戳
  4. 微信个性状态来了,可以显示“等级”!
  5. 助力数字化运营:商超自动抓单系统
  6. SAP License:SAP Business One 与SAP R/3的区别
  7. SAP License:CKMLCP运行物料帐时单个物料冲突无法运行
  8. SAP License:SAP顾问行业的生活状态实录,新人值得一看!
  9. 三、 redis进阶篇
  10. 牛客网算法工程师能力评估