// 定义一个 self 的 weak 引用 _self
#define __weakself __weak __typeof(self) _self = self;
示例:
__weakself
NSTestObj *obj = [NSTestObj new];
obj.block = ^{
[_self logCount];
};
// 定义一个 obj 的 weak 引用
#define __weakof(obj) __weak __typeof(obj) _##obj = obj;
示例:
NSTestObj *obj = [NSTestObj new];
__weakof(obj)
self.block = ^{
[_obj logCount];
};
定义 weak self 代替原 self
#define weakself typeof(self) _self = self;__weak typeof(_self) self = _self;
⚠️这个宏在用的时候需要加花括号(每个方法都会存在一个系统变量self,避免冲突,所以放在花括号内以局部变量使用)
- (void)func {
{
weakself
[Net.json GET:@"http://xx.json" params:nil success:^(NSURLResponse *response, NSDictionary *object) {
// 这里的 self 即 weak self
[self.array addObjectsFromArray: object[@"data"]];
} failure:^(NSError * _Nonnull error) {
}];
}
}