Block基础详解

#import <Foundation/Foundation.h>

//定义一个块变量类型
typedef void (^FKProcessBlock)(int);

//使用FKProcessBlock定义最后一个参数类型为块
//此方法有三个参数,块是最后一个参数
void processArray1(int array[],unsigned int len,FKProcessBlock process)
{
    for(int i=0;i<len;i++)
    {
        //将数组元素作为参数调用块
        process(array[i]);
    }
}

void test1(FKProcessBlock testBlock)
{
    testBlock(8);
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //0.
        //定义一个数组
        int arr[]={2,4,6};
        //传入块作为参数调用processArray()函数
        processArray1(arr, 3, ^(int num1) {
            
            NSLog(@"元素平方:%d",num1*num1);
        });
        
        
      test1(^(int num) {
          NSLog(@"lalalalla");
      });
        
    
//        
//        //1.定义不带参数,无返回值的块
//        void(^printStr)(void)=^(void)
//        {
//            NSLog(@"不带参数,无返回值的块");
//        };
//        
//        printStr();
//        
//        
//        //2.定义带参数,有返回值的块
//        double(^hypot)(double,double)=^(double num1,double num2)
//        {
//            return sqrt(num1*num1+num2*num2);
//        };
//        
//        NSLog(@"带参数,有返回值的块:%f",hypot(3, 4));
//        
//        //3.也可以先只定义块变量:定义带参数,无返回值的块
//        void(^print)(NSString *);
//        print=^(NSString *string)
//        {
//            NSLog(@"%@",[NSString stringWithFormat:@"带参数,无返回值的块:%@",string]);
//        };
//        print(@"顾金跃");
//        
//        
//        
//        //4. 块可以访问程序中局部变量的值,但是不允许修改局部变量的值
//        //定义局部变量
//        int my=24;
//        void(^printMy)(void)=^(void)
//        {
//            //尝试对局部变量赋值,程序将会报错
//            //my=25;
//            
//            //访问局部变量的值是允许的
//            NSLog(@"看看局部变量值:%d",my);
//        };
//        
//        //再次修改my的值
//        //打印出来发现还是24,这是因为系统在定义块时就会把局部变量的值保存在块中,而不是等到执行时才去访问,获取局部变量的值
//        my=25;
//        printMy();
//        
//        
//        
//        //5.如果不希望在定义块时就把局部变量的值复制到块中,而是等到执行时才去访问,获取局部变量的值,甚至是改变局部变量的值,可以考虑使用__block修饰局部变量
//        
//        //定义局部变量
//        __block int my2=24;
//        void(^printMy2)(void)=^(void)
//        {
//            //尝试对局部变量赋值,程序将会报错
//           // my2=25;
//            
//            //访问局部变量的值是允许的
//            NSLog(@"看看局部变量值__block修饰:%d",my2);
//        };
//        
//        //再次修改my的值
//        //打印出来发现还是24,这是因为系统在定义块时就会把局部变量的值保存在块中,而不是等到执行时才去访问,获取局部变量的值
//        my2=26;
//        printMy2();
//        
//        
//        //6.直接把块作为参数传入指定方法
    }
    return 0;
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值