主要内容: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与局部变量

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGh1aTkz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="600" height="400" alt="">

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 ;

}

}

四、字面量

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

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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGh1aTkz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="800" height="500" alt="">

最新文章

  1. PHP-----文件系统的交互
  2. 关于如何在MVC中 执行JS
  3. Oracle日期函数和循环总结
  4. gulp系列:自动构建及刷新浏览器
  5. 被解放的GPU CSS3动画加速
  6. 利用Jquery给当前页或者跳转后页面的导航栏添加选中后样式
  7. 在VS中使用类模板出现出现LNK2019: 无法解析的外部符号错误。
  8. Linux(CentOS)文件操作命令
  9. C++ Primer 5th 第1章 开始
  10. DropBox与Box的区别,包括直接的投资人的评价(本地Sync可能还是挺重要的)
  11. ubuntu中mysql修改编码utf8
  12. python 学习网站
  13. MySQL索引实战经验总结
  14. 设置某个类使用或者禁用ARC
  15. SharePoint2013 列表栏设置
  16. 好代码是管出来的——使用Git来管理源代码
  17. java开发注解总结笔记
  18. Table的两种处理方法记录
  19. pythone函数基础(13)发送网络请求
  20. Android基础知识学习

热门文章

  1. Python Base of Scientific Stack(Python基础之科学栈)
  2. python认识标识符
  3. selenium的三种等待时间
  4. (转) 分布式文件存储FastDFS(七)FastDFS配置文件详解
  5. day09-文件的操作
  6. (5.2.1)配置服务器参数——即时文件初始化(IFI)
  7. golang bytes 包
  8. react typescript 子组件调用父组件
  9. 关于预测io调用的思考
  10. 34.分组聚合操作—bucket