主要内容: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第六课的更多相关文章

  1. NeHe OpenGL教程 第四十六课:全屏反走样

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  2. Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击

    Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击 文/玄魂 目录 Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击................... ...

  3. kali Linux Web 渗透测试视频教程— 第六课 网络扫描-nmap与zmap

    Kali Linux Web 渗透测试视频教程— 第六课 网络扫描-nmap与zmap 文/玄魂 目录 Kali Linux Web 渗透测试视频教程— 第六课 网络扫描-nmap与zmap. 1 N ...

  4. NeHe OpenGL教程 第三十六课:从渲染到纹理

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  5. NeHe OpenGL教程 第二十六课:反射

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  6. NeHe OpenGL教程 第十六课:雾

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  7. NeHe OpenGL教程 第六课:纹理映射

    转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...

  8. 【Linux探索之旅】第一部分第六课:Linux如何安装在虚拟机中

    内容简介 1.第一部分第六课:Linux如何安装在虚拟机中 2.第二部分第一课预告:终端Terminal,好戏上场 Linux如何安装在虚拟机中 虽然我们带大家一起在电脑的硬盘上安装了Ubuntu这个 ...

  9. 【C语言探索之旅】 第二部分第六课:创建你自己的变量类型

    内容简介 1.课程大纲 2.第二部分第六课: 创建你自己的变量类型 3.第二部分第七课预告:   文件读写 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C ...

随机推荐

  1. ACM_Power Mouth

    Power Mouth Time Limit: 2000/1000ms (Java/Others) Problem Description: Your task is to calculate the ...

  2. Android传递中文参数方法(之一)

    最近在做app,用的volley传参,有一个地方传中文参数不行(貌似是get方式),我又试了下post方式,成功了,记录下,以后有用! RequestQueue requestQueue = Voll ...

  3. DetachedCriteria和Criteria的使用方法

    DetachedCriteria和Criteria的使用方法 /*  * 下载统计  * @return  */ public String downloadStatistics(){  logger ...

  4. html5——伸缩布局

    基本概念 1.主轴:Flex容器的主轴主要用来配置Flex项目,默认是水平方向 2.侧轴:与主轴垂直的轴称作侧轴,默认是垂直方向的 3.方向:默认主轴从左向右,侧轴默认从上到下 4.主轴和侧轴并不是固 ...

  5. JS——client

    clientTop.clientLeft: clientTop:盒子的上boder clientLeft:盒子的左border clientWidth与clientHeight 1.在有DTD情况下: ...

  6. CSS——层级

    层级问题:选中的盒子显示的效果并不完整,右边的边框并没有显示红色,原因是其右边的盒子压了它的边框. <!DOCTYPE html> <html lang="en" ...

  7. SPA设计架构

    1.SPA是采用单页应用(Single Page Application)的方式来开发 2.SPA的框架有如Augular.js.Vue.js等.

  8. .htaccess使用

    RewriteEngine on #请求替换 #test-zhangsan-20 替换为 test.php?name=zhangsan&age=20 RewriteRule test-([a- ...

  9. @Order

    1.Spring 4.2 利用@Order控制配置类的加载顺序, 2.Spring在加载Bean的时候,有用到order注解. 3.通过@Order指定执行顺序,值越小,越先执行 4.@Order注解 ...

  10. 51nod1006 -最长公共子序列Lcs【动态规划】

    给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的). 比如两个串为: abcicba abdkscab ab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最 ...