关于Block内部要不要使用weakSelf的几种情况
程序员文章站
2022-03-04 13:56:51
...
1.block是控制器的属性,如果block内部没有使用weakSelf将会造成内存泄露
self.testBlock = ^()
{
NSLog(@"%@",self.mapView);
};
self.testBlock();
2.当block不是self的属性时,block内部使用self也不会造成内存泄露
TestBlock testBlock = ^()
{
NSLog(@"%@",self.mapView);
};
[self test:testBlock];
3.当使用类方法有block作为参数使用时,block内部使用self也不会造成内存泄露
[WDNetwork testBlock:^(id responsObject) {
NSLog(@"%@",self.mapView);
}];
只有当block直接或间接的被self持有时,才需要weak self。如果在 Block 内需要多次 访问 self,则需要使用 strongSelf。
准确的说,应该是假设 block被放在子线程中执行,而在执行过程中 self 在主线程被释放了。由于 weakSelf 是一个弱引用,因此会自动变成 nil。而在 KVO 中,会崩溃。
上一篇: Scala篇章04
下一篇: python究竟要不要使用多线程