IOS基础之 (十二) Block
一 定义
Block封装了一段代码,可以在任何时候执行。
Block可以作为函数参数或者函数的返回值,而其本身又可以带输入参数或返回值。
二 使用
1. 定义函数指针,然后在实现。
#import <Foundation/Foundation.h>
int (^max)(int,int);
int main(int argc, const char * argv[]) {
max = ^(int a,int b){
return a >b ? a:b;
};
int maxVal = max(, );
NSLog(@"maxVal=%d" , maxVal );
return ;
}
在第3行定义函数指针,在第7行实现函数指针,在12行调用函数指针。
2. 在定义函数指针的同时,并实现。
#import <Foundation/Foundation.h>
int (^max)(int,int) = ^(int a, int b){
return a > b ? a : b;
};
int main(int argc, const char * argv[]) {
int maxVal = max(, );
NSLog(@"maxVal=%d" , maxVal );
return ;
}
3.用typedef先声明类型,再定义变量进行赋值
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
typedef int (^max)(int,int);
max getMax = ^(int a, int b){
return a > b ? a:b;
};
int maxVal = getMax(, );
NSLog(@"maxVal=%d" , maxVal );
return ;
}
Block可以访问局部变量,但是不能修改。
int sum = ;
int (^myBlock)(int) = ^(int x){
int result = sum++;
return x * x;
};
如果要修改就要在第一行加关键字:__block
__block int sum = ;
int (^myBlock)(int) = ^(int x){
int result = sum++;
return x * x;
};
资料参考:
http://www.cnblogs.com/ljcgood66/p/4970628.html
http://www.cnblogs.com/e8net/p/3750825.html
http://www.cnblogs.com/goodboy-heyang/p/5240004.html
IOS基础之 (十二) Block的更多相关文章
- IOS基础之 (十二) 类的扩展
对OC类的扩展总结如下,共有4个: 1.子类 subClass 作用:可以使用类的继承来增添父类的变量和方法. 写法:在.h文件中 @interface Student : Person 2.分类 C ...
- Bootstrap <基础三十二>模态框(Modal)插件
模态框(Modal)是覆盖在父窗体上的子窗体.通常,目的是显示来自一个单独的源的内容,可以在不离开父窗体的情况下有一些互动.子窗体可提供信息.交互等. 如果您想要单独引用该插件的功能,那么您需要引用 ...
- Java 多线程基础(十二)生产者与消费者
Java 多线程基础(十二)生产者与消费者 一.生产者与消费者模型 生产者与消费者问题是个非常典型的多线程问题,涉及到的对象包括“生产者”.“消费者”.“仓库”和“产品”.他们之间的关系如下: ①.生 ...
- Python3基础(十二) 学习总结·附PDF
Python是一门强大的解释型.面向对象的高级程序设计语言,它优雅.简单.可移植.易扩展,可用于桌面应用.系统编程.数据库编程.网络编程.web开发.图像处理.人工智能.数学应用.文本处理等等. 在学 ...
- ios基础篇(二十九)—— 多线程(Thread、Cocoa operations和GCD)
一.进程与线程 1.进程 进程是指在系统中正在运行的一个应用程序,每个进程之间是独立的,每个进程均运行在其专用且受保护的内存空间内: 如果我们把CPU比作一个工厂,那么进程就好比工厂的车间,一个工厂有 ...
- ios基础篇(二十五)—— Animation动画(UIView、CoreAnimation)
Animation主要分为两类: 1.UIView属性动画 2.CoreAnimation动画 一.UIView属性动画 UIKit直接将动画集成到UIView类中,实现简单动画的创建过程.UIVie ...
- ios基础篇(二十六)—— UITableViewCell的分组索引与标记
一.表视图的索引目录 首先要创建一个TableView,之前有说过,这里就不详细说了(参考前面第十四篇). 直接贴代码吧, #import "ViewController.h" @ ...
- ios基础篇(二十四)—— 文字、图片的绘制及其自定义Button
这篇文章我们主要来拿官方的控件来研究一下,我们来仿照官方的控件,自己来实现它提供的控件: 首先来看看基本的图片与文字的绘制,很简单. 一.imageView 所有的视图都是继承自UIView,所以我们 ...
- iOs基础篇(二十二)—— UIPickerView、UIDatePicker控件的使用
一.UIPickerView UIPickerView是一个选择器控件,可以生成单列的选择器,也可生成多列的选择器,而且开发者完全可以自定义选择项的外观,因此用法非常灵活. 1.常用属性 (1)num ...
随机推荐
- 解决: osx内置vpn连接后无法ping自己的vpn ip地址
The route table looks like this after connected to the VPN: 10.20.1/24 10.20.11.147 UGSc 0 0 utun0 1 ...
- f2fs解析(三)NAT中如何区分inode和其他dnode
首先,我们要知道NAT中的每个表项都对应着MAIN AREA区域中NODE段的一个block,还要知道NODE block很特别,block末尾会有一个node footer结构: 243 struc ...
- [Usaco2010 OPen]Triangle Counting 数三角形
[Usaco2010 OPen]Triangle Counting 数三角形 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 394 Solved: 1 ...
- Android 判断现在系统存储器是“手机存储”还是“SD存储”
import android.os.storage.StorageManager; String fileDir = null; StorageManager storageMa ...
- [教程]Oracle 11g Express 安装和使用教程
使用工具的第一步就是安装工具,配置环境!下面就Oracle 11g Express的安装和简单实用做一简介. 一.下载安装过程 去oracle的官网下载Oracle 11g express,大概300 ...
- 构建高转化率的着陆页-PS+HTML+网络营销
课程简介 本课程是全网独家专业的着陆页课程,课程完整的再现了整个着陆页实战案例的开发过程,包括:策划.设计和实现.上线后的推广.优化及提高转化率的技巧等,本套课程能帮助您迅速掌握着陆页的能力,迅速洞察 ...
- LeetCode:Unique Binary Search Trees I II
LeetCode:Unique Binary Search Trees Given n, how many structurally unique BST's (binary search trees ...
- Java第一次实验
北京电子科技学院(BESTI) 实验报告 课程: java实验 班级:1352 姓名:吕松鸿 学号:20135229 成绩: 指导教师: 娄嘉鹏 实验日期及时间:20 ...
- 获取技能的成功经验和关于C语言学习的调查 2015528
内容提要 你有什么技能比大多人(超过90%以上)更好?针对这个技能的获取你有什么成功的经验?与老师博客中的学习经验有什么共通之处? 有关C语言学习的调查 你是怎么学习C语言的?(作业,实验,教材,其他 ...
- 我最优惠网系列(1)——HTML 解析类库HtmlAgilityPack
0. 序言 在开发我最优惠网的过程中,遇到一些问题和技术点,写出来和大家分享,也是我自己对近期工作的整理和记录,预计会有解析HTML类库.本地缓存.链接跳转和C#中执行js代码技巧等方面. 1. Ht ...