1、基本概念
block是代码段,是一段允许执行的代码,可以理解为是一种特殊的对象。有些编程语言将其称之为闭包(closure),是iOS4之后新增的语法。在OC中block可以定义为属性,方法参数,临时变量等
2、常用形式
//无参无返回值
void(^theBlock1)() = ^(){};//有参无返回值
void(^theBlock2)(int,int) = ^(int a,int b){};//无参有返回值
int(^theBlock3)() = ^(){return 0;
};//有参有返回值
int(^theBlock4)(int,int) = ^(int a,int b){return a+b;
};

3、使用typedef定义

typedef int (^MyBlock)(int,int); int main(int argc, const char * argv[]) {@autoreleasepool {MyBlock  theBlock = ^(int a,int b){return a+b;};NSLog(@"%d",theBlock(1,1));}return 0;
}

4、定义成方法参数

- (void)callDemo:(void(^)(NSString * str))theBlock
{
//接收到外界传入的block,在这个方法里面调用一下
theBlock(@“AA");
}

5、定义成属性

typedef void(^MyBlock)(int,int);
@interface ViewController ()@property (nonatomic,assign) int num;
/// block定义成属性
@property (nonatomic,copy) void (^theBlock1)();
@property (nonatomic,copy) MyBlock theBlock2;
@end
6、block访问和修改外部的变量
默认在block内是不允许修改外部变量的,如果想修改必须用__block来标示变量,让编译器知道这个变量是在block内部做修改操作的。
        在ARC的环境中block访问和修改外部变量
  • 单纯的定义一个block,那么block存放在全局区
  • block访问外部变量的时候,外部变量在内存中存储区域的变化:
  • 访问前变量存放在栈区,访问时变量存放在栈区,访问后变量存放在栈区
  • block修改外部变量的时候,外部变量在内存中存储区域的变化:
  • 修改前变量存放在栈区(被__block修饰后存储位置不受影响),修改时变量存放在堆区,修改后变量存放在堆区
7、block在OC中定义为属性要用copy修饰
在MRC的环境中,block存放在栈区,不能全局共享,要想实现全局共享要把其copy到堆区,这是原因所在,那么在ARC环境中strong和copy效果是一样的,但是苹果官方推荐还是用copy修饰

OC Bock的使用相关推荐

  1. OC 组合实现多继承

    OC无法完全先C++使用多继承,但可以采用组合的模式来代替继承模式.(协议实现)实现多继承的代码:举例现在ClassC需要继承ClassA中methodA.ClassB中methodB,具体的代码为: ...

  2. OC实用转换model的工具

    OC实用转换model的工具 说明 这是本人写的一个专门用来将json数据直接转换生成Model文件的工具,目的是为了让你从写Model文件的繁琐过程中解脱出来,提升效率以及减少出错的几率,工具的特点 ...

  3. OC学习笔记之Foundation框架NSNumber、NSValue和NSDate(转)

    一.NSNumber OC数组类NSArray,它只能存放 OC的对象,对于基本的数据类型确无能为力,但是实际编程中经常要把基本的数据如int.float,结构体存放的OC数组中,怎么办?这里的 NS ...

  4. OC学习篇之---对象的拷贝

    在前一篇文章中我们说到了如何解决对象的循环引用问题:http://blog.csdn.net/jiangwei0910410003/article/details/41926369,这一篇文章我们就来 ...

  5. OC中的NSArray和NSMutableArray、NSDictionary和NSMutableDictionary用法

    一:NSArray 和NSMutableArray 1: NSArray:不可变数组 NSArray是OC中使用的数组,只能用来存放OC对象,不能存放非OC对象如基本数据类型 它使不可变的,一旦初始化 ...

  6. oc 协议 回调 静态成员_OC底层原理探究:Category、关联对象和block本质

    1.分类Category的使用 // 给MJPerson类添加分类 @interface MJPerson : NSObject - (void)run; @end@implementation MJ ...

  7. 转载 iOS js oc相互调用(JavaScriptCore) --iOS调用js

    iOS js oc相互调用(JavaScriptCore) 从iOS7开始 苹果公布了JavaScriptCore.framework 它使得JS与OC的交互更加方便了. 下面我们就简单了解一下这个框 ...

  8. 6 OC 中的isa 指针

    目录 一 isa 指针 二 类对象中的superclass 一 isa 指针 isa 指针 ,OC 中的对象都是有的 如下图所示,实例对象isa 指针指向 类对象,类对象的isa 指针指向 元类对象 ...

  9. 7 OC 中class 类的结构

    目录 一 OC 中class 的结构 https://opensource.apple.com/tarballs/objc4/ 在最新的objc源码中 化繁就简来看的话 是以下结构 struct ob ...

最新文章

  1. ARP监控工具ARPalert
  2. Cannot change version of project facet Dynamic Web Module to 2.5 问题的解决方法
  3. python开发安卓程序-用python开发android应用(1)
  4. Java EE 8发生了什么? (第2部分)
  5. java优秀算法河内之塔_河内塔的Java程序
  6. 工作分析文献综述_北大教授分析了124 篇不合格硕士学位论文,发现了6个典型问题!...
  7. 3110: [Zjoi2013]K大数查询
  8. 麦克纳姆轮全向移动机器人速度分解
  9. android消息发送字符串,Android aSmack-如何对文件发送进行自定义消息...
  10. es6箭头函数_如何优雅地使用 ES6 箭头函数
  11. (8)Redis-Cluster集群理论及实践【中】
  12. java 卡密_【java实现点卡生成】
  13. 如何将mp4视频格式转换成mov视频
  14. 一个医院为何要架设数字网络时钟系统(电子时钟系统)
  15. CTF_crypto常见加密密文特征
  16. ddns-go搭建ddns(动态域名解析)
  17. (纪中)2431. 移动奶牛(herding)
  18. 1.5 Nginx进程模型解析
  19. 自动化部署工具瓦力(walle)的简单项目配置步骤
  20. 密码学认证协议名词解释,AKE,PKI,IBC,PKG,KGC,

热门文章

  1. 狼性团队也需柔性管理
  2. Android开发者如何搭建服务器
  3. [linux] linux sed命令删除一行/多行
  4. 电商专题-电商项目开发规模
  5. python实现四种出行路线规划(公交、步行、驾车、骑行)
  6. xeon bronze 3106
  7. Laravel使用Dingo API+JWT实现认证机制 无痛刷新Token
  8. linux对nohup日志进行定时拆分并且删除~持续补充
  9. Linux内核模块管理
  10. chrome无法上网