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="">
OC第六课的更多相关文章
- NeHe OpenGL教程 第四十六课:全屏反走样
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击
Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击 文/玄魂 目录 Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击................... ...
- kali Linux Web 渗透测试视频教程— 第六课 网络扫描-nmap与zmap
Kali Linux Web 渗透测试视频教程— 第六课 网络扫描-nmap与zmap 文/玄魂 目录 Kali Linux Web 渗透测试视频教程— 第六课 网络扫描-nmap与zmap. 1 N ...
- NeHe OpenGL教程 第三十六课:从渲染到纹理
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第二十六课:反射
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第十六课:雾
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第六课:纹理映射
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- 【Linux探索之旅】第一部分第六课:Linux如何安装在虚拟机中
内容简介 1.第一部分第六课:Linux如何安装在虚拟机中 2.第二部分第一课预告:终端Terminal,好戏上场 Linux如何安装在虚拟机中 虽然我们带大家一起在电脑的硬盘上安装了Ubuntu这个 ...
- 【C语言探索之旅】 第二部分第六课:创建你自己的变量类型
内容简介 1.课程大纲 2.第二部分第六课: 创建你自己的变量类型 3.第二部分第七课预告: 文件读写 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C ...
随机推荐
- ACM_Power Mouth
Power Mouth Time Limit: 2000/1000ms (Java/Others) Problem Description: Your task is to calculate the ...
- Android传递中文参数方法(之一)
最近在做app,用的volley传参,有一个地方传中文参数不行(貌似是get方式),我又试了下post方式,成功了,记录下,以后有用! RequestQueue requestQueue = Voll ...
- DetachedCriteria和Criteria的使用方法
DetachedCriteria和Criteria的使用方法 /* * 下载统计 * @return */ public String downloadStatistics(){ logger ...
- html5——伸缩布局
基本概念 1.主轴:Flex容器的主轴主要用来配置Flex项目,默认是水平方向 2.侧轴:与主轴垂直的轴称作侧轴,默认是垂直方向的 3.方向:默认主轴从左向右,侧轴默认从上到下 4.主轴和侧轴并不是固 ...
- JS——client
clientTop.clientLeft: clientTop:盒子的上boder clientLeft:盒子的左border clientWidth与clientHeight 1.在有DTD情况下: ...
- CSS——层级
层级问题:选中的盒子显示的效果并不完整,右边的边框并没有显示红色,原因是其右边的盒子压了它的边框. <!DOCTYPE html> <html lang="en" ...
- SPA设计架构
1.SPA是采用单页应用(Single Page Application)的方式来开发 2.SPA的框架有如Augular.js.Vue.js等.
- .htaccess使用
RewriteEngine on #请求替换 #test-zhangsan-20 替换为 test.php?name=zhangsan&age=20 RewriteRule test-([a- ...
- @Order
1.Spring 4.2 利用@Order控制配置类的加载顺序, 2.Spring在加载Bean的时候,有用到order注解. 3.通过@Order指定执行顺序,值越小,越先执行 4.@Order注解 ...
- 51nod1006 -最长公共子序列Lcs【动态规划】
给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最 ...