1.Block为什么要用copy来修饰
- 默认情况下,block是存档在栈中,可能被随时回收,通过copy操作可以使其在堆中保留一份, 相当于一直强引用着。
2.Block作为属性的写法
@property (copy,nonatomic) void(^MyBlock)();
3.Block作为参数的写法
-(void)loadData:(void(^)())success
4.Block为了防止循环引用和在block内的延时操作时访问到空对象,我们应该进行如下操作
__weak typeof(self) weakSelf = self;
[self setMyBlock:^{
__strong typeof(weakSelf) strongSelf = weakSelf;
}];
- '__weak'是为了防止循环引用;
- '__strong'是为了防止在block中进行一些耗时操作时候,当其需要访问对象,对象被销毁,访问到空对象;有了它,那么会在block都执行完毕后,再去销毁对象