Objective-C中Block的常见用法
typedef int(^AddValue)(int,int);
int main(int argc, const char * argv[]) {
@autoreleasepool {
//1:NSStackBlock
__block int curNum = ;//如果block内想要修改外部声明的局部变量,则需要将该变量声明为__block类型,否则该变量是const类型的,不能再block内修改
int (^testBlock)(void) = ^(void){
curNum++;
return curNum * ;
};
NSLog(@"testBlock:%d,curNum = %d",testBlock(),curNum);
//2:NSGlobalBlock
AddValue addValue = ^(int a,int b){
a = a +b;
return a + b;
};
int a = ;
int b = ;
NSLog(@"addvalue : %d a = %d, b = %d",addValue(a,b),a,b);
//
void (^printString)(NSString *);
printString = ^(NSString *str){
NSLog(@"printString:%@",str);
};
printString(@"hello world");
}
return ;
}
打印结果:
testBlock:,curNum =
addvalue : a = , b =
printString:hello world
Block分为三种类型:
*1.NSGlobalBlock:不访问外部变量
*2.NSStackBlock:位于栈内存,访问结束后释放
*3.NSMallocBlock:位于堆内存
Block与方法的区别:
*1.都有返回值,
*2.参数列表
*3.可以保存代码,
*4.调用方式相同
可以使用typedof定义Block类型,好处是可以生命多个该Block类型的变量,而传统方式只能声明一个变量。
注意事项:
*1.Block可以访问外部变量
*2.Block内不能修改外部变量的值,除非在外部变量类型前用__block关键字(两个下划线哦)修饰
*3.copy。在类属性中,要使用copy
*4.block是Objective-C中的对象,但是跟已定义的类又有所不同,block默认在栈上分配,一般类的实例对象在堆上分配。Block对象在栈上分配,block的引用指向栈帧内存,而当方法调用过后,指针指向的内存上写的是什么数据就不确定了。
Objective-C中Block的常见用法的更多相关文章
- Guava中Predicate的常见用法
Guava中Predicate的常见用法 1. Predicate基本用法 guava提供了许多利用Functions和Predicates来操作Collections的工具,一般在 Iterabl ...
- JAVA中enum的常见用法
JAVA中enum的常见用法包括:定义并添加方法.switch.遍历.EnumSet.EnumMap 1.定义enum并添加或覆盖方法 public Interface Behaviour{ void ...
- Java中枚举的常见用法
在JDK1.5以后引入了一种新的类型,就是枚举(enum).enum是用来声明枚举类型数据,它可以像数组一样存储许多的元素,但是不同于数组的是,它除了数字不能存储以外, 其他类型的如字母.特殊符号.汉 ...
- (转)轻松掌握shell编程中数组的常见用法及示例
缘起:在老男孩进行linux培训shell编程教学中,发现不少水平不错的网友及同学对数组仍然很迷糊,下面就给大家分享下数组的用法小例子,希望能给大家一点帮助.其实SHELL的数组很简单,好用.我们学习 ...
- block的常见用法
一.声明和定义 1.声明 声明方式:返回值(^block)(参数).声明时,参数变量名可以省略:使用时,参数变量名不能省略,不然会无法调用传入的参数 void(^block)(); void(^blo ...
- iOS中Block的基础用法
本文简介 本章不会对Block做过多的实现研究.只是讲解基本的用法.纯粹基础知识.结合实际项目怎么去做举例.Block使用场景,可以在两个界面的传值,也可以对代码封装作为参数的传递等.用过GCD就知道 ...
- Objective-C中#define的常见用法
参考博客 http://blog.csdn.net/kindazrael/article/details/8108868 在C语言中,预处理代码是非常强大的工具,能让代码变得可读性和可维护性更强.预处 ...
- 转:VC中MessageBox的常见用法
一.关于MessageBox 消息框是个很常用的控件,属性比较多,本文列出了它的一些常用方法,及指出了它的一些应用场合. 1.MessageBox("这是一个最简单的 ...
- VC中MessageBox的常见用法
一.关于MessageBox 消息框是个很常用的控件,属性比较多,本文列出了它的一些常用方法,及指出了它的一些应用场合. 1.MessageBox("这是一个最简单的 ...
随机推荐
- <亲测>阿里云centos7安装redis
安装redis yum install redis 启动redis systemctl start redis.service 设置redis开机启动 systemctl enable redis.s ...
- 《Java并发编程实战》笔记-取消与关闭
1,中断是实现取消的最合理方式.2,对中断操作的正确理解是:它并不会真正地中断一个正在运行的线程,而只是发出中断请求,然后由线程在下一个合适的时刻中断自己.3,区分任务和线程对中断的反应是很重要的4, ...
- PAT 乙级 1069 微博转发抽奖(20) C++版
1069. 微博转发抽奖(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue 小明PAT考了满分,高兴之余决定 ...
- hadoop 伪分布式安装
0. 关闭防火墙 重启后失效 service iptables start ;#立即开启防火墙,但是重启后失效. service iptables stop ;#立即关闭防火墙,但是重启后失效. 重启 ...
- Web jsp开发学习——实现页面跳转和传参
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletExcepti ...
- [UE4]Visiblity、Render Opacity
Visiblity 1.Visible 默认是visible,可见,并且可响应事件(如点击事件) 2.Collapsed 不可见.不响应事件.不占用容器空间 3.Hidden 不可见,不响应事件,但占 ...
- [UE4]角度和弧度
1角度 = 一个圆周的1/360 1弧度 = 长度为半径的弧,其所对的圆心角
- php安装imagemagick扩展 常见问题与解决方案(win平台)
1.写在前面 1-1.ImageMagick介绍 ImageMagick是一套功能强大.稳定而且开源的工具集和开发包,可以用来读.写和处理超过89种基本格式的图片文件,包括流行的TIFF.JPEG.G ...
- orcale 函数wm_concat不存咋lob值使用zh_concat 替换
create or replace TYPE zh_concat_im AUTHID CURRENT_USER AS OBJECT ( CURR_STR VARCHAR2(32767), STATIC ...
- echart力导向图
<!DOCTYPE html> <html lang="en"> <head> <meta charset="GBK" ...