zoukankan      html  css  js  c++  java
  • 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;

    __block等价于static,变量存储于全局区,程序运行过程中一直存在,直到程序运行结束

    全局变量不需要使用__block,存储于全局区

    block与数组排序

    1     NSArray *arr = [NSArray arrayWithObjects:@"zhao",@"qian",@"sun",@"li",@"zhou",@"wu",@"zheng",@"wang", nil];
    2     NSArray *sortedArray = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    3         return - [obj1 compare:obj2];
    4  
    5     }];
    6     //正常排序[obj1 compare:obj2]
    7     //反着排序 - [obj1 compare:obj2]
    8     //反着排序[obj2 compare:obj1]
    9     NSLog(@"%@",sortedArray);

     iOS中得字面量

    Literals(字面量),是一种简易表示值得方法

    字面量默认创建不可变的数组,字典等,要创建可变的要用完整的初始化方法创建

  • 相关阅读:
    石子游戏2
    礼物的最大价值
    CF512D. Fox And Travelling
    arc099F
    CF504E. Misha and LCP on Tree(长链剖分求k级祖先)
    agc031D
    CF555E. Case of Computer Network
    agc023D
    CF1406E. Deleting Numbers
    CF585F. Digits of Number Pi
  • 原文地址:https://www.cnblogs.com/limicheng/p/3817815.html
Copyright © 2011-2022 走看看