第一节 block基础知识学习

作者: 柳声 | 来源:发表于2016-08-05 11:55 被阅读242次
    Dear All 这次我们来学习block知识 ,废话不说 、让我们直奔主题

    block也是一个指针,保存的是一段代码块在内存中的空间 (栈内存)
    下面声明一个最简单的block:

    /*
     void 返回值 表示调用这一段代码会返回什么数据
     (^block1) block1表示代码块的名(指针名),但是需要在指针名前添加"^"
     (void) 参数,里面跟的是参数类型和参数名,如果有多个参数 都写在()中,但是需要用","分割
     */
    
    void(^block1) (void) = NULL;
    
    /*
    ^(void)表示的是block的参数,需要把block声明时的参数写过来
    然后在"("之前添加"^",")"后添加一对"{}",
    该大括号的内容就是该block的代码块内容
    */
    block1 = ^(void) {
          NSLog(@"-------");
    };
    block1();
    

    无返回参数 和 有返回参数 的block使用

    //无返回参数
    void (^block2) (int a, int b) = ^(int a, int b) {
        NSLog(@"------>%d", a + b);
    };
    block2(5, 6);
    
    //返回类型为int
    int (^block3) (int a, int b) = ^(int a, int b) {
        return a + b;
    };
    NSLog(@"===>%d", block3(1, 2));
    
    //再看下参数为 NSString 类型的
    void (^bloak7) (NSString *text) = ^(NSString *text) {
        NSLog(@"hello world! %@", text);
    };
    bloak7(@"小明");
    
    NSString * (^block8) ( NSString *) = ^( NSString * text) {
        return text;
    };
    NSLog(@"%@", block8(@"测试"));
    

    以上的使用block都是表示某个类型的指针,使用场景多为某个方法当中,那我我们如何能将block作为一个参数传递呢 ?,接下来我们就把block定义为某一类型的指针函数。举例如下

    //下面的这三种Block 就不再表示某个指针,而是表示某一类型的指针 。例如 我可以用Block1来声明 无参无返回的block指针
    
    #import "ViewController.h"
    typedef void (^Block4) (void);
    typedef void (^Block5) (int a, int b);
    typedef int  (^Block6) (int a, int b);
    

    再我们用关键字 typedef 定义了Block 类型后,接下来的使用就舒服多了,举例如下

    Block1 block4 = ^(void) {
        NSLog(@"block4....");
    };
    block4();
    
    Block2 block5 = ^(int m, int n) {
        NSLog(@"---==%d", m + n);
    };
    block5(10, 12);
    
    Block3 block6 = ^(int a, int b) {
        return a + b;
    };
    int n = block6(10, 1);
    NSLog(@"%d", n);
    

    是不是顿时觉着使用起来舒服多了,哈哈这仅仅是个开始,接下来的章节我们将一起学习block 更精妙的部分 Learning together is Better
    [第二节 block知识学习(copy,__weak,__block)]
    http://www.jianshu.com/p/75f2d854e869

    相关文章

      网友评论

        本文标题:第一节 block基础知识学习

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