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与局部变量

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 ;

}

}

四、字面量

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

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

时间: 2024-10-14 18:40:18

OC第六课的相关文章

第六课 简易网页制作展示

<head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> <link href="test1 html.css" rel="stylesheet" type="text/css" /> </head>

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

0 内容简介 1.课程大纲 2.第二部分第六课: 创建你自己的变量类型 3.第二部分第七课预告: 文件读写 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建你自己的变量

BeagleBone Black板第六课:C++编程控制GPIO基础

BBB板第六课:C++编程控制GPIO基础 在一上课我们通过Shell脚本编程实现了对GPIO端口的简单输出控制,实现对两个LED指示灯的交替点亮和关闭,接下来的一两节课,将通过C++程序来实现Shell脚本的功能.为了实现对应的程序控制,我查阅了好多资料,测试过程中发觉网上的一些程序套用过来总是出现各种各样的编译错误,压根就控制不了BBB板,不知是我的BBB板太新,还是以前的程序太旧.最后还是从头开始,重新研究BBB板的文件系统,找出头文件,找出所有相关的函数,终于实现GPIO的C++程序控制

Spark3000门徒第六课精通Spark集群搭建总结

今晚听了王家林老师的第六课精通Spark集群搭建和测试,课后作业是:搭建自己的spark环境并成功运行pi,我的总结如下: 1 硬件环境: 至少8GB内存,推荐金士顿内存,虚拟机推荐Ubuntu kylin版本,可以安装各种办公软件包括搜狗输入法.上网方式:Nat,root权限登录,避免权限问题 2.软件环境: RedHat 6.4  spark 1.6.0   hadoop 2.6.0   scala 2.11.8 3 /etc/hosts ip-hostname对应关系 spark.even

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

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第三十六课:从渲染到纹理 放射模糊和渲染到纹理: 如何实现放射状的滤镜效果呢,看上去很难,其实很简单.把渲染得图像作为纹理提取出来,在利用OpenGL本身自带的纹理过滤,就能实现这种效果,不信,你试试. 嗨,我是Dario Corn

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

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第四十六课:全屏反走样 全屏反走样 当今显卡的强大功能,你几乎什么都不用做,只需要在创建窗口的时候该一个数据.看看吧,驱动程序为你做完了一切. 在图形的绘制中,直线的走样是非常影响美观的,我们可以使用反走样解决这个问题.在众多的解决

【C++探索之旅】第一部分第六课:控制流程,随心所至

内容简介 1.第一部分第六课:控制流程,随心所至 2.第一部分第七课预告:函数效应,分而治之 控制流程,随心所至 上一课<[C++探索之旅]第一部分第五课:简易计算器>比较简单,这一课也不难,却很重要. 其实目前来说,基础部分和<C语言探索之旅>有些类似.难免有些重复,毕竟C++从C语言借鉴了不少.不过小编保证之后进入C++的面向对象编程部分,才是精彩中的精彩.敬请期待~ 好了,扯回正题. 大家应该看过不少科幻片吧,其中很大一部分是说电脑发展起来成为人工智能和人类打架的(反正最终都

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

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第六课:纹理映射 纹理映射: 在这一课里,我将教会你如何把纹理映射到立方体的六个面. 学习 texture map 纹理映射(贴图)有很多好处.比方说您想让一颗导弹飞过屏幕.根据前几课的知识,我们最可行的办法可能是很多个多边形来构建

【C语言探索之旅】 第一部分第六课:条件表达式

内容简介 1.课程大纲 2.第一部分第六课:条件表达式 3.第一部分第七课预告:循环语句 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建你自己的变量类型 文件读写 动