Block的使用
1、block的定义有三种,无返回值无参数:typedef void(^block) (void);
有返回值无参数:typedef int(^block) (void);
有返回值有参数:typedef int(^block)(int a);
2、在使用block的过程中,__weak typeof(self) weakSelf = self;并不是什么时候都是用,但是使用时没问题的;
3、如果block调用外部变量为局部变量,那么仅仅是值的传递,外部变量的改变不会影响内部,如果过是全局变量或者变量由__blcok修饰,那么内外是一个同一个变量;
4、在UIView的block动画中一般不会造成循环应用,而在GCD的block函数中调用self我们则要考虑循环引用;
5、block的循环引用:如在类A中定义了属性block属性block和string属性name,那么在使用block的时候
__weak typeof(self) weakSelf = self;这里使用__weak即可解决循环引用问题
self.block=^{
NSLog(@"testBlock=%@",weakSelf.name);
};
self.block = ^{
__strong typeof(weakSelf) strongSelf = weakSelf;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(3 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
NSLog(@"dispatch_after=%@",strongSelf.name);
});
};