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与局部变量
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第六课的更多相关文章
- NeHe OpenGL教程 第四十六课:全屏反走样
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击
Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击 文/玄魂 目录 Kali Linux Web 渗透测试视频教程— 第十六课-拒绝服务攻击................... ...
- kali Linux Web 渗透测试视频教程— 第六课 网络扫描-nmap与zmap
Kali Linux Web 渗透测试视频教程— 第六课 网络扫描-nmap与zmap 文/玄魂 目录 Kali Linux Web 渗透测试视频教程— 第六课 网络扫描-nmap与zmap. 1 N ...
- NeHe OpenGL教程 第三十六课:从渲染到纹理
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第二十六课:反射
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第十六课:雾
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- NeHe OpenGL教程 第六课:纹理映射
转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线 ...
- 【Linux探索之旅】第一部分第六课:Linux如何安装在虚拟机中
内容简介 1.第一部分第六课:Linux如何安装在虚拟机中 2.第二部分第一课预告:终端Terminal,好戏上场 Linux如何安装在虚拟机中 虽然我们带大家一起在电脑的硬盘上安装了Ubuntu这个 ...
- 【C语言探索之旅】 第二部分第六课:创建你自己的变量类型
内容简介 1.课程大纲 2.第二部分第六课: 创建你自己的变量类型 3.第二部分第七课预告: 文件读写 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C ...
随机推荐
- Educational Codeforces Round 24 题解
A: 考你会不会除法 //By SiriusRen #include <bits/stdc++.h> using namespace std; #define int long long ...
- 【POJ1845】Sumdiv(数论/约数和定理/等比数列二分求和)
题目: POJ1845 分析: 首先用线性筛把\(A\)分解质因数,得到: \[A=p_1^{a_1}*p_2^{a_2}...*p_n^{a_n} (p_i是质数且a_i>0) \] 则显然\ ...
- [转]Linux 正则表达式详解
转自:http://www.jb51.net/article/42989.htm 一.linux文本查找命令 在说linux正规表达式之前,还介绍下linux中查找文本文件常用的三个命令: 1.gre ...
- Tomcat发布项目,域名访问
域名访问项目 1,去掉访问路径的端口号: 找到 Tomcat 下的 conf 文件中的 server.xml,找到 8080 修改成 80, 2,项目绑定域名: <Host name=" ...
- MYSQL创建用户和授权方法(测试mysql5.7)
一.创建用户: 命令:CREATE USER 'username'@'host' IDENTIFIED BY 'password'; 说明:username - 你将创建的用户名, host - 指 ...
- Leetcode0523--Continuous Subarray Sum 连续和倍数
[转载请注明]https://www.cnblogs.com/igoslly/p/9341666.html class Solution { public: bool checkSubarraySum ...
- JS——html基本结构
document.title——文档标题 document.head——文档头标签 document.body——文档的主体 document.documentElement 表示整个文档的html标 ...
- (转) 分布式文件存储FastDFS(一)初识FastDFS
http://blog.csdn.net/xingjiarong/article/details/50559849 一.FastDFS简介 FastDFS是一款开源的.分布式文件系统(Distribu ...
- codeforces_724C_Ray Tracing
C. Ray Tracing time limit per test 2 seconds memory limit per test 256 megabytes input standard inpu ...
- iOS 9 中可用的受信任根证书列表
iOS 受信任证书存储区包含随 iOS 预安装的可信根证书. https://support.apple.com/zh-cn/HT205205 关于信任和证书 iOS 9 受信任证书存储区包含三类证 ...