zoukankan      html  css  js  c++  java
  • OC第六课

    主要内容:Block(Block语法、Block使用、Block实现数组排序)

    一、Block语法

           Block:块语法、本质上是匿名函数(没有函数名称的函数),和函数指针非常相似

           函数回想:

                   实现了某一功能的代码块的封装,(函数声明、函数定义、函数调用三步)

           函数指针回想:

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

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

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

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

           Block:

           注意:

                   1、最后的 “ ; ” 必须写

                   2、參数的变量名不能省略

                   3、block赋的值就是一个匿名函数

           匿名函数:没有名称的函数

           Block语法:如图所看到的

               具体解释:

                       Block类型:int (^) int

                       Block变量:myblock      

                       Block值:^( int  sum ) { return  7 * sum ; } ;

              即:^返回值类型 (參数列表) { 函数体 }(返回值类型能够省略)

    二、Block的使用

           演示样例:

                   写一个返回两个整型数据和的Block块

                   int  (^sum) (int , int ) = ^(int  x ,  int  y) {

                             return   x + y ;

                   }

                   int  a = sum(20 , 10 ) ; / / 调用block函数


                   写一个求最大值的block

                   int  (^maxBlock) (int ,  int ) = ^(int  x , int  y){

                              return  x > y ? x : y ;

                   }

                   

           对block进行typedef

           typedef   int (^sumBlock) (int  x , int y) ;

                    新类型:sumBlock

                    原类型:int (^) (int , int)

                    等价与:sumBlock  ^sum2 = ^(int  x , int  y){

                                             return   x + y ;

                                   }

    三、block与局部变量和全局变量

           block块内部能够使用外部变量

           对于全局变量来说:可读可写

           对于局部变量来说:可读、不可写,假设想要改变局部变量的值。须要在局部变量前面前面加 __block 进行修饰

           演示样例:

                   Block与局部变量







              Block与全局变量:



    三、Block与数组排序

           演示样例:

                  对Student对象排序

                  Student  *stu1 = [ Student  StudentWithName : @"xiaoming" , age : 21 ] ;

                  Student  *stu2 = [ Student  StudentWithName : @"" , age : ] ;

                  NSMutableArray  *mu = [ NSMutableArray  arrayWithObjects : stu1 , stu2 , nil ] ; 

                  mu  sortUsingcomparator : ^NSComparionResult(id obj1 , id  obj2){

                                if ( [obj1 getAge] > [obj2 getAge]) {

                                             return   NSOrderedDescending ; 

                                } else if ( [obj1  getAge] < [obj2  getAge] ) {

                                             return   NSOrderedAscending ;

                                } else {

                                             return   NSOrderedSame ;

                                }

                  }

    四、字面量

            字面量是一种新型的写法,能在一定程度上简化代码

            注意:字面量创建的对象是变量构造的,而且是不可变的



  • 相关阅读:
    阿里云SLB的http强制转https
    nginx反向代理springboot的jar包
    阿里云Centos7上添加swap分区
    AWS云怎么删除信用卡账户
    Linux记录别人操作
    Jumpserver里常用的sudo权限
    端口一览表
    网络端口及其详解
    阿里云安全防坑指南
    LINUX添加只读用户(查日志专用)
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/6917233.html
Copyright © 2011-2022 走看看