码迷,mamicode.com
首页 > 其他好文 > 详细

简述block

时间:2016-02-22 16:32:49      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:

block传值也适用于从后往前传值

先介绍block的基本知识

/**
 *  1、如何定义一个Block变量
    2、怎样给定义的Block变量赋初值
    3、如何冲定义Block类型
    4、如何使用Block实现具体的佛那个能
    5、Block与变量作用域的关系
 */


int sum(int a, int b) {
    return a + b;
}

int count = 100;

int main(int argc, const char * argv[]) {
    
    /**
     *  1、Block是一种数据类型,并且是一种自定义的数据类型
        2、Block的标志是^(托字符)
        3、Block是匿名函数,TA与函数最主要的区别在于,函数在编译器就已经知道封装了什么功能,但是Block只有当执行时才知道内部封装的功能,所以说Block更加灵活多变
        4、Block的作用也是封装代码段来实现具体的功能
        5、既然Block是匿名函数,所以赋值时,不能将函数名直接赋值,初值为函数的实现体
     */
    
    __block int a = 6;
    
    void (^testBlock)() = ^ {
        NSLog(@"%d",a);//Block内部可以访问局部变量的值
        
        a = 9; //Block内部如果想修改外界局部变量的值,必须对变量进行__block修饰
        
        count = 101;//Block内部可以直接修改全局变量的值,也可以直接访问全局变量的值
    };
    testBlock();
    NSLog(@"a = %d, count = %d",a, count);
    
    
    int (*p)(int, int) = sum;
    typedef int (*P)(int, int);
    
    //myBlock是一个有参有返的匿名函数
    //myBlock是变量名
    //Block类型为 int (^)(int , int),表示此Block为有一个整型返回值,两个整型参数的匿名函数
    //初值为:
//    ^(int a, int b) {
//        return  a + b;
//    }
    
    /**
     *  书写格式
        1、初值中的返回值类型可以省略不写,但是必须保证,函数内部返回给外界的值的类型与返回值类型相同
        2、定义Block变量的类型中,参数名可以省略不写,但是初值中参数名不能不写,否则无法参与运算
        3、如果Block没有参数,那么在初值中表示参数的小括号可以省略不写
     */
    typedef int (^MyBlock)(int, int);
    
    int (^myBlock)(int, int) = ^(int a, int b) {
        return  a + b;
    };//Blocl实现
    NSLog(@"result is %d",myBlock(10, 20));//Block执行
    
    MyBlock subBlock = ^(int a, int b) {
        return a - b;
    };
    
    
    void (^helloBlock)() = ^ {
        NSLog(@"hello world");
    };
    
    //将字符串转整型
    int (^intBlock)(NSString *) = ^(NSString *string) {
        return [string intValue];
    };
    
    NSComparisonResult (^compareBlock)(NSString *, NSString *) = ^(NSString *str1, NSString *str2) {
        return [str1 compare:str2];
    };
    
    
    NSLog(@"%ld",compareBlock(@"a", @"b"));
    helloBlock();
    NSLog(@"%d",intBlock(@"123"));
    
    
    
    
    
    
    
    return 0;
}

 

 

 

简述block

标签:

原文地址:http://www.cnblogs.com/dabaomo/p/5207321.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!