Block的使用

1. 是啥?

   是一个静态的函数代码块,其本质是一个指向结构体的指针,可以被当做参数传递

2.怎么用?

2.1 作为函数代码块使用
    int(^add)(inta,intb) = ^(inta,inta){//定义了一个名为add的代码块,有两个参数,
        return a+b;
    };
    NSLog(@"%d",add(1,2));//调用代码块

2.2 作为参数传值
    @property (nonatomic,copy) void(^cancelBtnEventBlock)();//定义,block一创建是放在栈区的,所以需要用copy将其拷贝到堆区以供其他地方用
        if (self.cancelBtnEventBlock) {//调用,只有在调用时才会执行回调的方法
            self.cancelBtnEventBlock();
        }
        self.pickerView.cancelBtnEventBlock = ^(){//回调方法
    };

3.什么时候用?

3.1 传值的使用用
3.2 作为代码块的时候用(可以在全局使用)

4.用的时候需要注意什么?

    4.1 在使用block时要对block指针做判空处理,否则当指针为空时会造成崩溃。

    4.2  在MRC的编译环境下,block如果作为成员参数要先copy一下([myBlock copy])将栈上的block拷贝到堆上。

    4.3 在block调用之后要对block指针做赋空值处理(myBlock = nil),如果是MRC的编译环境下,要先release掉block对象([myBlock release],因为之前copy过)再赋空值,以解除循环引用。

    4.4 在ARC下,在Block内部使用self或成员变量时要用__weak修饰;MRC下用__block修饰。

    4.5 在多线程环境下(block中的weakSelf有可能被析构的情况下),需要先将self转为strong指针,避免在运行到某个关键步骤时self对象被析构。

    4.6 若要在块代码内部修改外部变量的数值,需要在定义外部变量的前面用__block修饰(不加__block是值传递,加了之后才是地址传递)

5.其他

   回调多于2个,用代理,因为block的可读性低。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 【1】7,9,-1,5,( ) A、4;B、2;C、-1;D、-3 分析:选D,7+9=16;9+(-1)=8;(...
    Alex_bingo阅读 19,615评论 1 19
  • 曾经有一份美好的爱情放在我的面前我没有珍惜。等到失去后才后悔莫及。如果可以再对小李说。毛欣想说。这辈子无缘再牵手。...
    毛欣与小李阅读 8,265评论 0 13
  • Block是iOS在4.0之后新增的语法,在iOS SDK 4.0之后,block几乎出现在所有新版的API之中,...
    阿窝额咦呜芋阅读 3,385评论 0 0
  • 1 block的基本概念 1.1 block的产生和用途 代码块Block是苹果在iOS4开始引入的对C语言的扩展...
    堂吉诃德灬阅读 3,693评论 0 5
  • 捧一杯热咖静坐窗前, 看一方雪景万般皆白发, 吹一口热气半升半旋, 品一抹醇厚不惹娇华。 冲出屋子迎接那雪, 闭上...
    还叫乐成阅读 1,486评论 2 1

友情链接更多精彩内容