在使用block 的过程中,经常会采用为了解决 循环引用,多线程等的问题而烦恼。
在使用block 处理这些问题时,需要注意什么呢?
@interface FirstViewController ()
@property (strong, nonatomic) dispatch_block_t block;
@end
@implementation FirstViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
// weak 用来解决循环引用的问题
__weak typeof(self) weakSelf = self;
dispatch_block_t block = ^{
// 采用 strong ,当多线程执行到此处时,保障对象在没有释放的情况下,进行正确的逻辑操作
// 只有一个线程操作时,不会有问题的,
// 此处的strong, 在执行block时, 才会生效,如果不执行block 不会生效的
typeof(self) strongSelf = weakSelf;
NSLog(@"block");
if (strongSelf) {
NSLog(@"%@", weakSelf.description);
} else {
// 如果对象释放时,需要做什么?
}
};
self.block = block;
self.block();
self.view.backgroundColor = [UIColor whiteColor];
}
- (void)dealloc {
self.block = nil;
NSLog(@"%@ dealloc", self.description);
}
@end
总结避免循环引用,考虑多线程的情况,记得
weak-strong dance
网友评论