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