您的位置:首页 > 其它

认识Block

2015-11-16 17:29 246 查看

什么是Block?

Block是一种特殊的数据类型,就是一个代码块,可以用于回调。

Block定义格式

返回值类型(^block变量名)(形参列表) = ^(形参列表){

}

调用

block变量名(实参列表);



[code]void(^myBlock)(void) = ^(){
    NSLog(@"我是一个block");
};

myBlock();


Block的模式

无参数无返回值的Block

无参数有返回值的Block

有参数无返回值的Block

有参数有返回值的Block

Block使用注意点

虽然说ARC是自动管理内存,但是如果我们使用Block不正确,会引起循环引用导致内存泄露,因此得结合下面一个小点 Block的修饰

Block的修饰

此处的详细内容见__weak和__block的区别

Block的使用范例

无参数无返回值的Block

[code]/**
 1.  无参数无返回值
 */
 2. (void)funcOne {
    void(^emptyBlock)() = ^{
        NSLog(@"无参数无返回值block");
    };

    emptyBlock();
}


无参数有返回值的Block

[code]/**
 *  无参数有返回值
 */
- (void)funcTwo {
    int(^myBlock)() = ^{
        return 2;
    };

    NSLog(@"%d",myBlock());
}


有参数无返回值的Block

[code]/**
 *  有参数无返回值
 */
- (void)funcThree {
    void(^myBlock)(int,int) = ^(int a,int b){
        NSLog(@"%d+%d=%d",a,b,a+b);
    };

    myBlock(3,4);
}


有参数有返回值的Block

[code]/**
 *  有参数有返回值
 */
- (void)funcFour {
    NSString *(^myBlock)(int,int) = ^(int a,int b){
        return [NSString stringWithFormat:@"hello,%d and %d",a,b];
    };

    NSLog(@"%@",myBlock(3,4));
}


本文没有对Block做过多的现实研究,只是讲解基本的用法。纯粹基础知识。结合实际项目怎么去做举例。Block使用场景,可以在两个界面的传值,也可以对代码封装作为参数的传递等。用过GCD就知道Block的精妙之处。Block作为参数传递的情况没有写了,如果有补充或者有疑问的,欢迎讨论!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: