zoukankan      html  css  js  c++  java
  • Objective-C基础10 :代码块

    代码块是对函数的一种扩展,但是比c语言中的函数指针高级多了。

    1.声明和定义。returnType (^blockName)(list of arg) = ^returnType(list of arg){body;};

    其中右边的returnType可以省略,因为编译器可以通过代码块的声明来推断函数的返回值;如果代码块没有参数右边的list of arg也可以省略。

     int (^square)(int number) = ^int(int number){ return number * number;}; //没有省略返回值

     int (^square)(int number) = ^(int number){return number * number;}; //省略返回值

    void (^theBlock)() = ^{ printf("Hello Blocks! "); };//最简单的形式,没有返回值和参数列表

    2.如何使用代码块。

    1)可以像函数一样直接调用,并且代码块可以访问跟它作用域一样的局部变量。

     int value = 6;
     int (^multiply_block)(int number) =  ^(int number) {return (value * number);};
     int result = multiply_block(7);
     printf("Result = %d
    ", result);
    

     2)可以在需要需要传递函数作为参数的地方使用代码块。

            NSArray *array = [NSArray arrayWithObjects:@"Amir", @"Mishal", @"Irrum", @"Adam", nil];
            NSLog(@"Unsorted Array %@", array);
            NSArray *sortedArray = [array sortedArrayUsingComparator:^(NSString *object1, NSString *object2) {
                return [object1 compare:object2];
            }];
            NSLog(@"Sorted Array %@", sortedArray);
    

     3)代码块可以跟函数指针一样使用typedef 。

    typedef double (^MKSampleMultiply2BlockRef)(double c, double d);
    
    int main(int argc, const char * argv[])
    {
        MKSampleMultiply2BlockRef multiply2 = ^(double c, double d) { return c * d; };
        printf("%f, %f", multiply2(4, 5), multiply2(5, 2));
        return 0;
    }
    
  • 相关阅读:
    读写文件print函数操作
    协程相关
    线程池
    多线程条件
    ibm动态测试
    ubuntu 之 搜狗拼音安装
    Linux 安装 出现Could not get lock /var/lib/dpkg/lock
    Sql server
    maven 搭建
    EOS
  • 原文地址:https://www.cnblogs.com/52xpz/p/4280694.html
Copyright © 2011-2022 走看看