iOS学习笔记---oc语言第六天

Block 、数组高级

block本质上就是匿名函数(没有名称的函数)

block语法和函数指针很相似

回顾函数

 

函数:C语?中,实现某一类功能的代码段。

 

完整的函数包含两部分:函数声明、函数定义

 

函数声明,即函数原型。例如:int sum(int x,int y);具有两个整型参 数,一个整型返回值的函数。

 

函数定义,即函数实现。例如:int sum(int x,int y){
    retrun x + y;
     }

回顾函数指针

函数指针(变量):存放函数地址(函数名)的指针变量。

int (*p)(int x,int y) = sum;

函数指针类型:int (*)(int x,int y) 即:指向 两个整型参数,一个整型返回值函数 的指针。

函数指针变量:p 函数指针的值:sum

Block

匿名函数:没有名称的函数。 例如 int (int x, int y)

因为Block是匿名函数,block变量存放的函 数的实现,通过block变量能直接调?用函数

 没有名称的函数应该如何调?用?(有名称的话,可以直接调?用,也

可以通过函数指针来调?用)

    int (^block1)(int,int) = ^int (int x,int y)
    {
        return x + y;
    };
    //类型 int(^)(int,int)
    //变量名 block1
    //初始值
//    ^int (int x,int y)
//    {
//        return x + y;
//    }
    typedef int (^BlockType)(int,int);
    BlockType block2 = ^ int (int x,int y){
        return x * y;
    };
    //给block 变量赋值时  值的特点:以 ^ 开头 函数的定义(实现),去掉函数名

block函数定义中返回值类型  可以省略  通常都会省略

 

 1     int (^aa)() = ^(){
 2         return 10;
 3     };
 4     //当block没有参数的时候可以把函数定义后面的()省略掉
 5 //    int (^aa)() = ^{
 6 //        return 10;
 7 //    };
 8     NSLog(@"%d",aa());
 9     void (^hello)() = ^{
10         NSLog(@"hello world");
11     };
12     hello();//没有返回值没有参数的block

 在block体中可以直接使用外部变量,但是不能修改这个变量 想要修改在变量前面加__block;

iOS学习笔记---oc语言第六天,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。