A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨光0618 中级黑马   /  2016-8-27 00:19  /  1018 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


1.block是一个数据类型
  • 存储一段代码
  • 但不是任意的代码都可以存储
  • 声明block类型变量的时候,必须要指定这个block变量中可以存储的代码的参数和返回值,一旦指定,这个block类型只能存储这样的代码段,别的格式的代码段是无法存储
  • block类型的声明
    • void(^myBlock)();
    • 代表声明了一个block类型的变量,变量名叫做myBlock
    • 这个变量中只能存储没有返回值也没有参数的一段代码
    • int(^myBlock1)(int num1,int num2);
    • 代表声明一个block类型的变量,变量名叫做myBlock1
    • 这个变量中只能存储int返回值类型,参数为两个int类型的代码
  • block变量的赋值
    • ^myBlock = ^void()
      {
             NSLog(@"Hasakei!");
          };
    • 代表创建了一段block类型的代码,代码中存储是 NSLog(@"Hasakei!”);这段代码
    • 也可以写在一起
  • block简写方式
    • 若block的代码段没有参数
    • 那么代码段前的参数小括号可以省略
      • ^void
        {
            NSLog(@"laugh out loud");
        };
      • void后的()可以省略
    • 如果代码段没有返回值,那么代码段前的返回值类型void也可以省略
      • ^{
            NSLog(@"laugh out loud");
        };
      • 即^后的返回值类型和参数的小括号都可以省略
    • 在声明block变量时,如果要求存储的代码有参数,这时参数的名字可以省略,只写类型
      • int(^myBlock2)(int,int);
  • typedef将一个长的block类型定义为一个短类型
    • 语法
      • typedef 返回值类型 (^新类型名称)(参数列表)
      • e.g.  typedef int (^nice)(int a,int b,int c); == int(^nice)(int a,int b,int c);
      • 直接使用^nice就可以定义新block代码段了
2.在block代码块的内部可以取出外部的全局变量和局部变量的值
  • 在block代码块的内部可以定义一个和外部变量名称相同的变量,就近原则
  • 在block代码块的内部,可以访问全局变量和局部变量,可以修改全局变量的值,但是不能修改局部变量的值
  • 若非要修改局部变量的值,那么在局部变量前需要使用__block修饰

3.block的用途
  • block作为函数的参数
    • 只需要在函数的小括号当中写上一个block类型的参数即可
    • void saiHi(void (^myBlock)());
    • 如何调用带有block参数的函数
    • 可以先将要传递的block代码段存储到一个block变量中去
    • 然后通过函数调用时参数加入相应的变量即可
    • 也可以在函数调用时直接填写上block类型的代码段

2 个回复

倒序浏览
{:5_237:Hasakei,面对疾风吧!
回复 使用道具 举报
六六六,学习了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马