主要内容: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. 如何获取select控件的option值和Value?

    案例: <select id="paId" class="text3">                    <option value=& ...

  2. flask中路由系统

    flask中的路由我们并不陌生,从一开始到现在都一直在应用 @app.route("/",methods=["GET","POST"]) 1 ...

  3. ACM_蛋糕小王子铁头娃

    Problem Description: 铁头娃制作了很多蛋糕,想分给他的小伙伴们,他的小伙伴很喜欢铁头娃做的蛋糕,每个人都想分到最多蛋糕 铁头娃想到了一个头铁主意:先给小伙伴们从1到N编号,在1-N ...

  4. EasyUI系列学习(三)-Draggable(拖动)

    一.创建拖动组件 0.Draggable组件不依赖于其他组件 1.使用标签创建 <div class="easyui-draggable" id="box" ...

  5. [ SHOI 2014 ] 概率充电器

    \(\\\) \(Description\) 一个含\(N\)个元器件的树形结构充电器,第\(i\)个元器件有\(P_i\)的概率直接从外部被充电,连接\(i,j\)的边有\(P_{i,j}\)的概率 ...

  6. Unity 引擎UGUI之自定义树形菜单(TreeView)

    先上几张效果图:          如果你需要的也是这种效果,那你就来对地方了! 目前,我们这个树形菜单展现出来的功能如下: 1.可以动态配置数据源: 2.点击每个元素的上下文菜单按钮(也就是图中的三 ...

  7. Caffe2:ubuntu修改链接方式ln

    参考:文件和目录命令-文件重定向 ln 使用caffe2,产生了此种情况: from caffe2.python import workspace >>WARNING:root:This ...

  8. 贴一段自动编译java,并混淆编译的代码

    刚写的一个自动编译.混淆.打包jar的代码,做个记录 用到的NuGet: <?xml version="1.0" encoding="utf-8"?> ...

  9. inline-block兼容IE7

    { display:inline-block; *display:inblock; *zoom:1 }

  10. 8.2.3 覆写 Equals

    经过对四种不同类型判等方法的讨论,我们不难发现不管是 Equals 静态方法.Equals 虚方法 抑或==操作符的执行结果,都可能受到覆写 Equals 方法的影响.因此研究对象判等就必须将注意 力 ...