美文网首页
IOS每日学习3.29

IOS每日学习3.29

作者: 北你妹的风 | 来源:发表于2018-05-30 10:22 被阅读12次

    创建block的语法。

    typedef "返回值类型"  (^blockName)(Param1,Param2);

    如果没有返回值,则是

    typedef void  (^blockName)(Param1,Param2);

    如果没有参数,则是

    typedef void  (^blockName)(void);

    block访问

    block体内访问局部变量,需要加__block关键字,等效于全局变量和静态变量。如果不加

    __block关键字,则是copy变量的值

    block访问static修饰的变量时,直接读取变量的最新值,而不是在block声明时候的值

    为防止循环引用,需要在block引用对象变量的时候加入以下代码

    __weak typeof(self) weakSelf=self;

    然后早block体里面用weakSelf来访问self里面的属性

    block的分类

    根据block在内存中位置可以分为三类:NSGloabBlock,NSStackBlock,NSMallocBlock

    第一种,不需要在运行时改变行为的block,不需要放在堆或栈上,一个很简单的判别方法就是,是否引用外部变量

    第二种,block是在栈上生成的,离开栈的作用域,block就无效了。在MRC环境下,需要手动的进行copy才能脱离栈使用。在ARC下,编译器自动进行copy操作

    第三种,block是在堆上生成的,在第二种,copy过之后的block其实就是位于堆上,即变成了NSMallocBlock

    相关文章

      网友评论

          本文标题:IOS每日学习3.29

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