一、缘由
有时候会因为循环引用导致对象无法释放时,会导致内存泄漏问题,使程序内存无法及时释放而内存增加。有时候我们想在block块中修改外部变量或者对象的值或属性,这些问题和需求使我们不得不去想办法更好地解决,这个时候我们会想到的是使用__weak和__block进行修饰。
二、block定义
在进行__weak和__block使用之前,我们先来对block块的基本定义回味一下,让接下来阅读起来更加地流畅。
定义如下:void(^myBlock)(void) 返回类型(^myBlock)(参数类型)
也可以使用typedef来给复杂的Block定义别名,写法为:typedef void(^myBlock)(void);
三、?
__weak typeof(self) weakSelf = self; // MRC下对象同样不会被释放
self.block = ^{
NSLog(@"%@", NSStringFromClass([weakSelf class]));
};
self.block();
案例一:__weak避免循环引用。当我们使用block块的时候,很容易就导致循环引用,可以使用__weak定义一个弱引用weakSelf