zoukankan      html  css  js  c++  java
  • Objetive-C学习_Block学习笔记

     

    Block : 带有自动变量(局部变量)的匿名函数。

    Block作用 : 用来保存一段代码,可以在适当的时候调用

    Block实质 : 结构体,其里面有一个函数指针

    Block应用场景 : 动画、多线程、集合遍历、网络请求回调

    Block格式 : ^返回值类型 参数列表 {表达式}  (如果返回值类型为void和参数列表为空时是可以省略不写的)

     

    Block与函数的对比 :

    声明  函数类型 : int ( * funcptr )(int);

    声明Block类型 : int (^ blk)(int);

    函数使用typedef  :  typedef  int  (^blk_t) (int);使用的时候就直接使用blk_t

    Block使用typedef : typedef int (* funcptr) (int);赋值的时候是用函数的地址funcptr func = &addTen;

    例子 blk_t blt = ^int (int a){//返回值一般不写,参数列表是要有()

                return 4;

            };

     

    截取自动变量值 : Block截获所使用的自动变量的值,不使用的是不会截获的。即保存该自动变量的瞬时值,在执行Block的语法后,即使改写Block中使用的自动变量的值也不会影响Block执行时自动变量的值。

    代码 :

    (1)int a = 10;

            blk_t block = ^ {

                NSLog(@"%d",a);

            };

            a = 100;

            block();//打印之后的结果是10而不是100

                  (2)Person * p = [[Person alloc]init];

            p.name = @"张三";

            blk_t block = ^ {

               //获取的是地址,并不是对象的本身

                NSLog(@"%@",p.name);

                [p1 release];

            };

            p.name = @"李四";

            [p release];

            p = nil;

            block();

        } // [Person name]: message sent to deallocated instance 0x100300170

     

    知识点和注意点 :

    (1)   默认情况下,block不能修改外面的局部变量(基本数据类型),除非在前面加__Block

    (2)   Block语法表达式中使用的局部变量被作为成员变量追加到Block所在的结构体中

    (3)  Block可以作为函数的参数,调用Block之前一定要判断,Block可以为nil

    (4)   使用Block的时候最好使用typedef

    (5)   如果获取的是引用的话,是可以修改对象的属性的,不要加__Block也是可以修改的

    (6)   在block中使用retain好像没有效果,但是使用release是可以的

     

  • 相关阅读:
    Jenkins+Docker+Git+Harbor流水线打包
    docker镜像批量打包
    二进制安装docker-18.06.3-ce
    kubeadm添加新master或node
    Host is not allowed to connect to this MySQL server
    RecyclerFullyManagerDemo【ScrollView里嵌套Recycleview的自适应高度功能】
    RecyclerSwipeAdapterDemo【使用AndroidSwipeLayout用于列表项侧滑功能】
    RecyclerViewItemTouchHelperDemo【使用ItemTouchHelper进行拖拽排序功能】
    Android APP应用启动页白屏(StartingWindow)优化
    KeyboardUtil【软键盘弹出后输入框上移一定的高度】
  • 原文地址:https://www.cnblogs.com/TangKaiFu/p/4442023.html
Copyright © 2011-2022 走看看