zoukankan      html  css  js  c++  java
  • OC基础--block

    block与函数类似:1.可以保存代码  2.又返回值  3.有形参  4.调用方式一样

    block的标志:^

    一、定义一个无参无返回值的block

    void (^myBlock)();--1.void 代表这个block变量没有返回值  2.最右边的括号(),代表block的参数,没有参数的话就为空

    3.中间的括号中^是block的标志,myBlock是block变量的名字

    二、定义一个接收两个int类型数据返回int类型的block

    int (^myBlock)(int,int);

    代码示例:

    1 // 定义一个block变量
    2     int (^sumBlock)(int,int);
    3     // 给定义的block变量赋值
    4     sumBlock = ^(int a,int b)
    5     {
    6         return a+b;
    7     };

    三、block中访问和修改变量的问题

    1.block内部可以访问外面的变量

    2.默认情况系,block内部不能修改外面的局部变量

    3.给局部变量加上__block关键字(两个下划线),这个局部变量就可以在block内部修改

    代码示例:

     1 void test3()
     2 {
     3     int a = 10;
     4     __block int b = 20;
     5     
     6     void (^block)();
     7     
     8     block = ^{
     9         // block内部可以访问外面的变量
    10         //NSLog(@"a = %d", a);
    11         
    12         // 默认情况下,block内部不能修改外面的局部变量
    13         // a = 20;
    14         
    15         // 给局部变量加上__block关键字,这个局部变量就可以在block内部修改
    16         b = 25;
    17     };
    18     
    19     
    20     block();
    21 }

    四、OC中的方法没有重载这一说,但是当遇到两个或两个以上的block的参数和返回值类型都一样的情况下,解决方法为利用typedef定义block类型,如下:

    typedef int (^MyBlock)(int,int);--这句代码定义了一个接受两个int类型参数,返回int的MyBlock类型

    调用:MyBlock sumBlock = ^(int a ,int b){ return a + b ; };

  • 相关阅读:
    poj 3253 Fence Repair (优先队列,哈弗曼)
    容斥原理 (转载)
    poj 1088 滑雪 DP(dfs的记忆化搜索)
    饭卡 01背包 + 贪心
    N分之一 竖式除法模拟
    poj2325 大数除法+贪心
    优先队列重载运算符< 以及初始化列表
    POJ 2718 Smallest Difference(贪心 or next_permutation暴力枚举)
    HASH算法
    字符串匹配算法——KMP算法
  • 原文地址:https://www.cnblogs.com/gchlcc/p/5220783.html
Copyright © 2011-2022 走看看