主要内容: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. 【洛谷1654/BZOJ4318】OSU!(期望DP)

    题目: 洛谷1654 分析: 本人数学菜得要命,这题看了一整天才看明白-- 先说说什么是"期望".不太严谨地说,若离散型随机变量(可以看作"事件")\(X\)取 ...

  2. ACM_开挂的小G

    开挂的小G Time Limit: 2000/1000ms (Java/Others) Problem Description: 小G寒假在家没网络,闲着没事干又看不下书,就玩起了单机游戏ACM_Ga ...

  3. 题解报告:hdu 1564 Play a game(找规律博弈)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1564 Problem Description New Year is Coming! ailyanlu ...

  4. Java NIO 聊天室实例

    最近写了个Java NIO聊天室聊天的程序,NIO学习起来比较困难的,我的代码能给大家起到一个抛砖引玉的作用! 服务端: package test.javanio; /** * @author * @ ...

  5. Redux 基础概念

    Redux is a predictable state container for JavaScript apps.,亦即 Redux 希望能提供一个可以预测的 state 管理容器,让开发者可以可 ...

  6. HDU_1028_Ignatius and the Princess III_(母函数,dp)

    Ignatius and the Princess III Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K ...

  7. SYN(synchronous)TCP/IP

    SYN(synchronous)是TCP/IP建立连接时使用的握手信号.在客户机和服务器之间建立正常的TCP网络连接时,客户机首先发出一个SYN消息,服务器使用SYN+ACK应答表示接收到了这个消息, ...

  8. 云计算时代,你为什么一定要学Linux?

    云计算早已不是什么稀奇的概念,它的火爆让Linux运维工程师这个职业越来越重要.在当今各类云平台提供的系统中,Linux系统几乎毫无争议的独占鳌头,市场份额进一步扩张. 这也让Linux运维工程师职位 ...

  9. 从 UI 交互角度说语音识别产品

    语言是人类进化的主要特征,而人工智能拥有了说话的能力也是科技进步的一个特征.在很多科幻的电影里面,我们可以看到人工智能的身影.在电影 her 里面见到的人工智能,真的让人叹为观止,他可以随意的和你聊天 ...

  10. 为什么Java中的密码优先使用 char[] 而不是String?

    可以看下壁虎的回答:https://www.zhihu.com/question/36734157 String是常量(即创建之后就无法更改),会保存到常量池中,如果有其他进程可以dump这个进程的内 ...