2018-04-19

2018-04-19  本文已影响4人  iOS打怪升级
第六章:块与大中枢派发
37. 理解块的概念

全局块,栈块,堆块,内联块。 全局块:不会捕获任何状态,运行时也无需有状态参与,所使用的内存区域在编译期已经确定,因此可以声明在全局区,全局块不可能被系统回收,相当于一个单例

void (^block) = {
        NSLog(@"this is a global  block ");
};

块是一个值 ,块会将捕获的所有变量都拷贝一份,捕获了多个就占用多少的空间,拷贝的是指向对象的指针变量;默认情况下,块获取的变量是不可以,是不可以在块内部修改的,除非对变量用 __block 修饰符修饰

38. 为常用的块类型创建typedef
块声明:返回值类型 (^变量名/块名)(参数列表)
void(^DownloadFinishedBlock)(NSData * data , NSError * error);

赋值:
void(^DownloadFinishedBlock)(NSData * data , NSError * error) = ^(NSData *data ,NSError * error){
      //doSomething
};

传参:
- method:(块参数列表)块名
- (void)startDownLoad:(NSData * data , NSError * error)completion;

typedef 返回值类型 (^类型别名)(参数列表);
typedef void(^DownloadFinishedBlock)(NSData * data , NSError * error);

赋值:
DownloadFinishedBlock block = ^(NSData *data ,NSError * error){
      //doSomething
};

传参:
- method:(块类型名)块名
- (void)startDownLoad:(DownloadFinishedBlock)completion;

调用:
[self startDownLoad:^(NSData * data , NSError * error){
     //doSomething
}];


总结:使用方便,方便修改参数,易于维护

上一篇 下一篇

猜你喜欢

热点阅读