主要内容: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. BZOJ 2178 Simpson积分

    思路: 我发现能用Simpson积分水的题  好像都是裸题诶233333 //By SiriusRen #include <bits/stdc++.h> using namespace s ...

  2. C++ 由虚基类 虚继承 虚函数 到 虚函数表

    //虚基类:一个类可以在一个类族中既被用作虚基类,也被用作非虚基类. class Base1{ public: Base1(){cout<<"Construct Base1!&q ...

  3. [转]sed常用命令总结

    转自:http://blog.chinaunix.net/uid-26963748-id-3249732.html 一.Sed简介 Sed:Stream Editor  流式编辑器 又称行编辑器,每次 ...

  4. 关于处理移动端Vue单页面及其内嵌兼容问题

    关于处理移动端Vue单页面及其内嵌兼容问题 question:由于最近转移了以前的H5项目,重构使用Vue单页面,导致部分手机内嵌或在微信浏览器中无法浏览,或者无法使用ajax请求:手机机型千变万化, ...

  5. Android使用的webcview中带有音乐播放控件,在关闭或分享时处于界面不可见状态下,声音仍在播放的问题解决

    一. 问题出现原因         我们在做APP分享时,分享webview加载带有音乐播放控件的网页.当弹出分享界面,webview的网页处于后台状态或关闭该网页时,音乐声仍在播放.出现该类现象使我 ...

  6. Java final和static 修饰符

    一.final final是不变的,最终的意思.可以用来修饰变量,方法,类. 1. 修饰变量 private final int a = 2; private final int b; // fina ...

  7. sql server 数据库跨服务器备份,复制监视器——快照代理,复制流程

    在做数据库跨服务器复制时,查看复制监视器的快照代理,可以看到复制流程,具体如下: 初始化 连接发布服务器 设置服务器数据库兼容性级别 更新索引的统计信息 在生成快照时锁定已发布的表 复制快照数据(每个 ...

  8. 一个有趣的 ”Validation of viewstate MAC failed” 错误的发现和解决

    在ASP.NET里面,View State使用较为广泛.它作为一个隐藏字段,可以帮助服务端”记住“客户端的改变,这样客户端 收到服务器对PostBack的响应后,仍然可以展现在PostBack之前设定 ...

  9. swift class protocol-限定协议只能由类实现

    protocol GameMode:class “You can limit protocol adoption to class types (and not structures or enume ...

  10. PHP 之递归遍历目录与删除

    /** * @Description: 递归查询目录文件 * @Author: Yang * @param $path * @param int $level * @return array */ f ...