您的位置:首页 > 移动开发 > IOS开发

Block的基本使用

2016-04-14 10:23 465 查看
在iOS 4.0之后,block横空出世,它本身封装了一段代码并将这段代码当做变量,通过block()的方式进行回调。

block的定义



写一个block

传入两个数,并且计算这两个数的和,

//定义一个block
int (^sumOfNumbers)(int a, int b) = ^(int a, int b) {
return a + b;
};

//使用block
int c = sumOfNumbers (10,20);
NSLog(@"%d",c);


输出的c的值为30;

block引起的循环引用

block在iOS开发中被视作是对象,因此其生命周期会一直等到持有者的生命周期结束了才会结束。另一方面,由于block捕获变量的机制,使得持有block的对象也可能被block持有,从而形成循环引用,导致两者都不能被释放:



遇到这种代码编译器只会告诉你存在警告,很多时候我们都是忽略警告的,这最后会导致内存泄露,两者都无法释放。跟普通变量存在__block关键字一样的,系统提供给我们__weak的关键字用来修饰对象变量,声明这是一个弱引用的对象,从而解决了循环引用的问题:

__weak typeof(self) weakself = self;

self.sum = ^(void){
NSLog(@"%@",[weakself class]);//弱引用不会循环引用
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios block 循环引用