iOS 快语句(block)的内存浅析
一, 简介
// 默认情况下,block是在栈中,随时可能被回收
void (^hgBlock)() = ^{
NSLog(@"一个简单的快语句");
};
// 对快语句做一次cope操作以后,block的内现存就会放到堆里面.
[hgBlock copy];
// 或者
// Block_copy(hgBlock);// 用于MRC机制下
二,开始分析
/**
block是用copy修饰词来管理内存
block即可以放在堆中,也可以使放在栈中.
*/
@property (nonatomic, copy) void (^hgBlock)();
@property (nonatomic, copy) NSString* name;
使用快语句场景一
- (instancetype)init {
if (self = [super init]) {
__weak typeof(self) weakSelf = self;
self.hgBlock = ^{
__strong typeof(weakSelf) strongSelf = weakSelf;
NSLog(@"%@", strongSelf.name);
};
}
return self;
}
使用快语句场景二
// 创建一个person对象
HGPerson* person = [[HGPerson alloc] init];
// 弱指针
__weak typeof(person) weakPerson = person;
person.hgBlock = ^{
// 若指针转成强指针
__strong typeof(weakPerson) strongPerson = weakPerson;
strongPerson.name = @"HG";
};