zoukankan      html  css  js  c++  java
  • block

    苹果官方非常推荐使用block,具体体层没研究过,只知道block封装了一段代码,可以在任意你需要的地方调用,用法如下

    返回值类型(^block名)(形参列表)这就定义了一个block

    比如定义一个返回两个数相加的block

    int main(int argc, const char * argv[])
    {
    
        @autoreleasepool {
            
            int (^Sum)(int,int)=^(int a,int b){
                return a+b;
            };
            
            int a=Sum(2,4);
            NSLog(@"%d",a);
    
        }
        return 0;
    }
    

    block还有一种特性,就是可以访问外部的变量,但是默认情况下不能修改外部的变量,如果要在block内部修改外部的变量,该变量需要被__block关键字修

    __block int temp=6;
            void(^AccessTemp)()=^(){
                NSLog(@"temp=%d",temp);
                temp=8;
                NSLog(@"temp=%d",temp);
            };
            AccessTemp();
    

     打印结果:

    2014-06-21 19:13:47.243 block测试[63536:303] temp=6

    2014-06-21 19:13:47.244 block测试[63536:303] temp=8

    顺利访问并修改了……

    可以把block用typedef定义成一种类型,像使用普通类型一样使用block

    typedef  int(^Jisuan)(int,int);
    
    int main(int argc, const char * argv[])
    {
    
        @autoreleasepool {
            Jisuan mul=^(int a,int b){
                return a*b;
            };
            NSLog(@"%d",mul(2,4));
            
        }
        return 0;
    }
    

     定义了一个接收两个int参数,返回int结果的block,将该block typedef为Jisuan类型,就可以像声明普通类型一样声明并使用Jisuan了

  • 相关阅读:
    第十一周编程总结
    第十周编程总结
    第九周
    第八周
    第七周编程总结
    第六周编程总结
    学期总结
    第十四周课程总结&实验报告(简单记事本的实现)
    第十三周课程总结
    第十二周课程总结
  • 原文地址:https://www.cnblogs.com/luseike/p/3801333.html
Copyright © 2011-2022 走看看