• ios开发 Block(一) 代码块


    一、什么是Blocks 
         Block是一个C级别的语法以及运行时的一个特性,和标准C中的函数(函数指针)类似,但是其运行需要编译器和运行时支持,从ios4.0开始就很好的支持Block。 

    二、在ios开发中,什么情况下使用Block 
         Block除了能够定义参数列表、返回类型外,还能够获取被定义时的词法范围内的状态(比如局部变量),并且在一定条件下(比如使用__block变量)能够修改这些状态。此外,这些可修改的状态在相同词法范围内的多个block之间是共享的,即便出了该词法范围(比如栈展开,出了作用域),仍可以继续共享或者修改这些状态。通常来说,block都是一些简短代码片段的封装,适用作工作单元,通常用来做并发任务、遍历、以及回调。 

    三、block如何申明(对比于c语言中的函数申明) 

    四、c函数指正和blocks调用 
         int (*CFunc) (int a) 函数调用 
         int result = CFunc(10); 
         int (^BFunc)  (int  a)  函数调用 
         int result = BFunc(10); 

    五、__block  关键字 
         一个Block的内部时可以引用自身作用域外的变量的,包括static变量,extern变量或自由变量(定义一个变量的时候,如果不加存储修饰符,默认情况下就是自由变量auto,auto变量保存在stack中的。除了auto之外还存在register,static等存储修饰符),对于自由变量,在Block中只读的。在引入block的同时,还引入了一种特殊的__block关键字变量存储修饰符。 

     1 #import "ViewController.h"
     2 
     3 @interface ViewController ()
     4 
     5 @end
     6 
     7 @implementation ViewController
     8 
     9 - (void)viewDidLoad
    10 {
    11     [super viewDidLoad];
    12     // Do any additional setup after loading the view, typically from a nib.
    13     
    14     int result=^(int a){return (a+a-a*a);}(5);
    15     NSLog(@"result:%d",result);
    16     
    17     
    18     NSString *(^addStr)(NSString*,NSString*);
    19     addStr=^(NSString *str1,NSString *str2){
    20     
    21         NSString *str=[NSString stringWithFormat:@"%@_%@",str1,str2];
    22         return str;
    23     };
    24     
    25    NSString *str3=addStr(@"fewfwe",@"fewefwfrgrthrth");
    26    NSLog(@"str3:%@",str3);
    27     
    28     int d=5;
    29     int(^addNum)(int a,int b);
    30     addNum=^(int a,int b){
    31     
    32         int c=a+d-b;
    33         return c;
    34     };
    35     int e=addNum(2,6);
    36     NSLog(@"c=%d",e);
    37     
    38     d=10;
    39     int f=addNum(2,6);
    40     NSLog(@"f=%d",f);
    41     
    42     NSString *strr1=@"sssss";
    43     NSString *rstr1=addStr(strr1,@"222");
    44     NSLog(@"rstr:%@",rstr1);
    45     
    46     NSString *strr2=@"kkkkk";
    47     NSString *rstr2=addStr(strr2,@"222");
    48     NSLog(@"rstr2:%@",rstr2);
    49     
    50 }
    51 
    52 
    53 - (void)didReceiveMemoryWarning
    54 {
    55     [super didReceiveMemoryWarning];
    56     // Dispose of any resources that can be recreated.
    57 }
    58 
    59 @end
  • 相关阅读:
    原生JS实现简易随机点名功能
    react 字父组件传值
    关于react组件传值问题
    轮波图
    烟花
    this的详解
    封装多元素多属性的链式缓冲
    留言板设计的流程,拖动窗口
    运动的小球
    运动的小球自动变键盘控制
  • 原文地址:https://www.cnblogs.com/guchengfengyun/p/4082002.html
Copyright © 2020-2023  润新知