iOS开发 - Block块的使用(一)基础概念

一 、基础概念

1、Block基础

     Block是C级别的语法和运行时特性。Block比较类似C函数,但是Block比之C函数,其灵活性体现在栈内存、堆内存的引用,我们甚至可以将一个Block作为参数传给其他的函数或者Block。

定义Block

    1. typedef void (^BoolBlock)(BOOL);//接受一个BOOL参数,没有返回值 
    2. typedef int (^IntBlock)(void);//没有参数,返回int
    3. typedef BoolBlock (^HugeBlock)(IntBlock);//参数和返回值都是block 


设置Block块并使用


定义Block块并使用

    - (void)someMethod 
    { 
        BoolBlock ablock = ^(BOOL bValue) { 
            NSLog(@"Bool block!"); 
        }; 
        ablock(); 
    } 

作为函数的返回值

    typedef void (^BoolBlock)(BOOL); 
    - (BoolBlock)foo() 
    { 
        BoolBlock ablock = ^(BOOL bValue) { 
            NSLog(@"Bool block!"); 
        }; 
        return [[ablock copy] autorelease]; // ARC中不用写autorelease
    } 

作为函数的参数

 - (void)foo(BoolBlock block) { if (block) { block(); } }

作为其他函数的参数

    BoolBlock bBlock = ^(BOOL bV){ NSLog(@"Bv")}; 
    HugeBlock hBlock = ^(BoolBlock bB) {bB();}; 
    hBolck(bBlock);

作为全局变量

   static int(^maxIntBlock)(int, int) = ^(int a, int b){return a>b?a:b;}; 


注意: block块的定义要用copy

在类中使用Block

    @interface OBJ : NSObject 
    @property (nonatomic, copy)BoolBlock block;//理由同上啊,同学们 
    @end 
     
    OBJ *obj = ... 
    obj.block = ^(BOOL bValue) { 
            NSLog(@"Bool block!"); 
        }; 

2 、 Block块的标记

如果想要在Block块中修改Block 以外的栈变量,一定要对变量加_block

int main() 
{ 
    __block int i = 1024; 
    BoolBlock bBlock = ^(BOOL bV) { 
        if (bV) { 
            i++; 
        } 
    }; 
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值