9.Block的写法,及使用注意

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都执行完毕后,再去销毁对象

你可能感兴趣的:(9.Block的写法,及使用注意)