美文网首页
Objective-C高级编程:Block

Objective-C高级编程:Block

作者: Django_Monstar | 来源:发表于2017-02-06 15:18 被阅读11次

    Block
    Block:带有自动变量(局部变量)的匿名函数
    在Block语法表达式中将赋值给在Block语法外声明的自动变量,需要在该自动变量上附加__block说明符。
    Blocks中截获自动变量的方法并没有实现对C语言中数组的截获,所以需要有指针代替

    3种Block对象类型
    Block也是Objective-C的对象,所以它有相应的类,根据Block存储区域划分有3种Block
    NSConcreteGlobalBlock,全局的静态Block,不会访问任何外部变量。

    NSConcreteStackBlock,保存在栈中的Block,当函数返回时会被销毁。(ARC状态下没有)

    NSConcreteMallocBlock,保存在堆中的Block,当引用计数为0时会被销毁。

    在ARC开启的情况下,将会只有NSConcreteGlobal和NSConcreteMallocBlock类型的block。由于ARC已经能很好的处理对象的声明周期的管理,这样所有对象都放到堆上管理,对于编译器实现来说,会比较方便。

    避免循环引用:使用__weak可以让Block无法持有实例,从而避免了循环引用。另外,为了方式在Block执行半途时实例被释放,通常在Block方法块中先创建一个__strong的实例指针对其进行持有,当Block方法块结束后,strongSelf就会被释放

    相关文章

      网友评论

          本文标题:Objective-C高级编程:Block

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