第六章:块与大中枢派发
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
}];
总结:使用方便,方便修改参数,易于维护
网友评论