zoukankan      html  css  js  c++  java
  • 高级编译-block小结

     1 block 总结
     2  范例
     3 
     4 - (void)demoTest{
     5     
     6      int(^demoBlock)(int, char) = ^ int(int count,char str){
     7      
     8      return count+1;
     9      };
    10      demoBlock(1,'b');
    11 }
    12  ---block声明:
    13      block声明:  返回值(^block名)(参数,参数)
    14      如果没有返回值 则可以 简化为 (^block名)(参数,参数),(^block名)()
    15 
    16 
    17      ---block实现:
    18      block实现:  ^返回值 (参数列表){};
    19      如果没有返回值 则可以 简化为 ^(参数列表){};
    20 
    21  ---声明block类型
    22      声明block类型:标准写法 typedef  返回值(^block名)(参数,参数)
    23 typedef int(^testBlock)(int, char); //代表声明一个testBlock类型的block

    24 - (void){ 25 testBlock a = ^ int(int count,char str){ 26 27 return count+1; 28 }; 29 小结:注意 int(^demoBlock)(int, char)和 typedef int(^testBlock)(int, char);都是声明block
    但是前者是声明一个变量名称是demoBlock的block变量;(声明了一个block变量) 后者typedef声明是声明一个testBlock类型的block,变量名称待定,自己起吧!!(声明了一个block类)


    30 ---block作为参数 31 OC方法 32 - (void)ocFountion:(NSString * (^)(NSString *a,NSString *b))block 33 { 34 35 } 36 typedef NSString * (^ocBlock)(NSString *a,NSString *b); 37 - (void)ocFountion1:(ocBlock)block 38 { 39 40 } 41 C方法 42 void cFounction(int (^cBlock)(int a,char b)) 43 { 44 45 } 46 typedef NSString * (^cBlock)(NSString *a,NSString *b); 47 void cFounction1(cBlock cblock) 48 { 49 50 } 51 ---block作为返回值 52 OC方法 53 typedef int (^ocBlockTest)(int); 54 - (ocBlockTest)ocFF 55 { 56 return ^(int a){ 57 return a+1; 58 }; 59 } 60 -(int (^)(int))ocFF1 61 { 62 return ^(int a){ 63 return a+1; 64 }; 65 66 } 67 68 C方法 69 typedef int (^cBlockTest)(int); 70 cBlockTest cFF(){ 71 return ^(int a){ 72 return a+1; 73 }; 74 75 } 76 int (^cBlockTest)(int) cFF(){//注意!!这样是不行的?? 77 return ^(int a){ 78 return a+1; 79 }; 80 81 }
     1 //指向函数的指针
     2 typedef int (*play)(char a,int b);
     3 - (void)setFounctionPoint
     4 {
     5     play o= &cFounction;
     6     o('f',1);
     7     NSLog(@"%d",o('f',1));//2
     8     
     9     
    10     
    11     int (*play1)(char a,int b) = &cFounction;
    12     
    13     play1('f',1);
    14     NSLog(@"%d",play1('f',1));//2
    15 
    16 }
    17 int cFounction(char a,int b)
    18 {
    19     return b+1;
    20 }
     1 //block 特性一  保存自动变量的瞬间值
     2 -(void)blockCharacter1
     3 {
     4     
     5     int val = 10;
     6     const char *fmt = "val = %d
    ";
     7     
     8     void(^blk)(void) = ^{
     9         printf(fmt,val);
    10     };
    11     
    12     val = 2;//这里有改动不行
    13     fmt = "the value were change.val =%d
    ";//这里有改动也不行
    14     
    15     blk();// 控制台 打印结果 val = 10
    16     
    17 
    18 }
    19 //block 特性二 __block修饰符 可以修改变量值
    20 typedef void (^charactorBlock)();
    21 - (void)blockCharacter2
    22 {
    23     //实例一
    24      __block int v = 1;
    25     void (^testBlock)() = ^{
    26         v =21;
    27     };
    28     testBlock();
    29     NSLog(@"%d",v);
    30     
    31     //实例二
    32    const NSArray *array = @[@1,@2];
    33     charactorBlock a =^{
    34           NSLog(@"%@",array[1]);
    35     };
    36     
    37     a();
    38      //实例三
    39    //char test[] = "hello";//报错无法提取  获取自动变量的方法,没有实现对c语言数组的截取
    40     char *test  = "hello";//可以
    41     
    42     charactorBlock b = ^{
    43         printf("%c",test[2]);
    44     };
    45     b();
    46    
    47 }
    48 
    49 

    //block 循环引用问题

     

  • 相关阅读:
    小小知识点(二)——如何修改win10 的C盘中用户下的文件夹名称
    Day15 Python基础之logging模块(十三)
    Day14 Python基础之os/sys/hashlib模块(十二)
    Day13 Python基础之time/datetime/random模块一(十一)
    Day12 Python基础之生成器、迭代器(高级函数)(十)
    Day11 Python基础之装饰器(高级函数)(九)
    火狐HACK
    javascript操作cookie
    <!DOCTYPE>标签的定义与用法
    前端性能优化
  • 原文地址:https://www.cnblogs.com/ly1973/p/6878942.html
Copyright © 2011-2022 走看看