oc中block的理解
来源:互联网 发布:淘宝淘宝全屏导航条 编辑:程序博客网 时间:2024/04/30 09:03
block可能是我在学习objective-c语法中遇到的第一个puzzle的地方。确实,这个语法takes some getting use to.
block实际是一种闭包,它是oc中对闭包的实现。闭包是什么?清楚地记得这个是我去年在参加鹅厂的实习笔试的时候的一个大题,记得没错是第二个大题。anyway,跑题了。。。
我是通过c中的函数指针的方式去理解block的。毕竟两个概念写起来太像了。例如一个ptr函数指针的声明:
int (*ptr)(int*, float);相应的block可以这么声明:
int (^bptr)(int*, float);
block需要使用符号^声明,^读作caret,看几个block的例子:
int main(int args, char *argv[]) {
<span style="white-space:pre"></span>@autoreleasepool {
<span style="white-space:pre"></span>void ^(showMessage)(void) = ^(void) {
<span style="white-space:pre"></span>NSLog("hehe");
<span style="white-space:pre"></span>}
<span style="white-space:pre"></span>showMessage();
<span style="white-space:pre"></span>}
<span style="white-space:pre"></span>return 0;
}
block可以访问block外部的成员,拿到block定义的时候成员的值,注意下面showMessge()输出3,而不是7:
int main(int args, char *argv[]) {
<span></span>@autoreleasepool {
<span style="white-space:pre"></span>int val = 3;
<span></span>void ^(showMessage)(void) = ^(void) {
<span></span>NSLog(@"val =%i", val);
<span></span>}
<span style="white-space:pre"></span>val = 7;
<span style="white-space:pre"></span>showMessage();
<span></span>}
<span></span>return 0;
}通常情况下,编译器是不允许在block内部修改block外部的成员值。在block内部看来,外部的成员对它而已是read-only的。
block访问外部变量:
0 0
- oc中block的理解
- OC中对Block理解
- OC block变量的理解
- 自己对OC中Block的理解2
- 个人对于OC中delegate、block的简单理解
- OC中Block的使用
- OC中Block的使用
- oc中block的定义和使用
- IOS中OC的BLOCK问题
- OC的Block中使用weakSelf/strongSelf
- OC中block的使用及注意
- OC中块Block的用法
- OC语法<3.2> OC中特有的语法:Block数据类型
- OC中Block、protocol
- OC block 与协议的一些小理解
- 黑马程序员 OC中的block的基础理解
- OC中@class的理解
- oc block的使用
- Android 智能指针(1)
- JMS的规范,以及ActiveMQ中p2p和publish/subscriber2中模式
- 在UWP中使用RichEditBox只读时图片显示问题(最后有关于RichEditBox颜色问题的解决方案)
- Spring事务配置的五种方式
- 4456: [Zjoi2016]旅行者 分治+最短路
- oc中block的理解
- 方法:Mac终端控制文件显隐性
- H264--1--编码原理以及I帧B帧P帧、pts&dts
- linux 个性化
- 第五章:函数
- compass 初学笔记一
- Java线程池的分析和使用
- Java工程构建工具ANT与Maven的区别
- 快速排序