block的简单简介

1、block的声明

void(^block)();

2、block的三种定义

三种方式 = ^(参数){  
}
a.void(^block1)() = ^(){

}
//如果没有参数 参数可以隐藏。如果有参数,定义的时候,必须要写参数,而且必须要有参数变量名
b.
void(^block2)() = ^{
}
void(^block2)(int) = ^(int a) {
}
//bock返回值可以省略,不管有没有返回值都可以省略
c.int(^block3)() = ^int{
  return 3;
}

3、bolck的用处

a. 封装模型方法
b.传值

传值

只要能拿到对方就能传值
顺传:给需要传值的对象,直接定义属性就能传值
逆传:用代理,block

4、block的存储

只要block没有引用外部局部变量,block放在全局区。

MRC管理block:
        只要block引用外部局部变量,block就放在栈区。
        block只能使用copy,不能使用retain,使用retain,block还在栈里面。
ARC管理block:
        只要arc引用外部局部变量,block放在堆里面。
        block使用strong,尽量不要用copy。

5、block会造成循环引用

block会对里面所有强指针变量都强引用一次。

6、其他

a.如果是局部变量,block是值传递。
 int a = 3;
void (^block)() = ^{
  NSLog(@"%d",a);
}
a = 5;
block();

//打印输出a = 5
b.如果是静态变量,block是指针传递```

static int a = 3;
void (^block)() = ^{
NSLog(@"%d",a);
}
a = 5;
block();

//打印输出a = 3

c.如果是全局变量,_ _block修饰的变量,block是指针传递




最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Block使用场景,可以在两个界面的传值,也可以对代码封装作为参数的传递等。用过GCD就知道Block的精妙之处。...
    Coder_JMicheal阅读 814评论 2 1
  • iOS代码块Block 概述 代码块Block是苹果在iOS4开始引入的对C语言的扩展,用来实现匿名函数的特性,B...
    smile刺客阅读 2,466评论 2 26
  • 《Objective-C高级编程》这本书就讲了三个东西:自动引用计数、block、GCD,偏向于从原理上对这些内容...
    WeiHing阅读 10,085评论 10 69
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 34,613评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,500评论 19 139

友情链接更多精彩内容