您的位置:首页 > 其它

Block知识点总结

2016-09-27 11:51 381 查看
block的作用

block用于保存一段代码 在适当的时候再使用 它是一种数据类型

block的定义格式:

返回值 (^block变量名)(形参列表) = ^(形参列表) {

需要执行的代码
};

调用block 直接用block 变量名后面跟上小括号 小括号里面方式参数就可以了

如: block变量名(参数)

例如: 如下定义一个没有参数没有返回值的block

void (^Operation)()= ^(){

}

如果block没有参数 可以这样写

void (^Operation)()= ^{

}

调用block 使用 Operation() 即可

定义一个有参数没有返回值的block

void (^Operation)(NSString* a)= ^(NSString *a){

}

调用block : Operation(@"我是一个有参数没有返回值的block");

定义一个有参数有返回值的block

int (^sum)(int,int) = ^(int a,int b){

  return a+b;

}

调用block : int sum = Operation(1,5);

知道了block的简单使用之后 接下来我们来说说block在内存中是怎样的

首先 默认block 是存放在栈空间的 但是如果你把block作为一个属性 并且进行了copy 操作之后 那么此时block 就会存储到堆空间

也就是说: 如果你没有对block进行copy操作 那么block 就存放在栈空间 如果你对block进行copy操作 那么block 就存放在堆空间

我们在开发中经常会碰到循环引用的问题 这个问题是怎么产生的呢? 记住下面两个结论你就明白了

1.如果block存储于栈空间 不会对block内部 所用到的对象产生强引用

2.如果block存储于堆空间 会对block内部 所用到的对象产生强引用

那么这里就牵扯出了循环引用的问题 如何解决循环引用呢?

记住下面两个结论 解决循环引用 So Easy

1.ARC下 使用 __weak 或者 __unsafe_unretainted

1.MRC下 使用__block
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: