美文网首页
2018-04-19

2018-04-19

作者: iOS打怪升级 | 来源:发表于2018-04-19 13:39 被阅读4次
    第六章:块与大中枢派发
    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
    }];
    
    
    

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

    相关文章

      网友评论

          本文标题:2018-04-19

          本文链接:https://www.haomeiwen.com/subject/ctrwkftx.html