block

作者: 麻辣香锅加特辣 | 来源:发表于2018-06-27 15:24 被阅读11次

    1.block默认在栈中,调用_Block_copy(只会改变栈block的存储区域)会将block拷贝到堆;赋值给block变量的block存储在全局数据区,如果block引用了外部变量,则存储在堆

    2.对block做copy操作会对它所引用的对象做retain操作,

      非ARC:如果引用的对象用__block修饰,不会retain

      ARC:用__weak/__unsafe__unretained修饰,不会retain

    * block是控制器的属性,如果block内部没有使用weakSelf将会造成内存泄露

    * 把block内部抽出一个作为self的方法,当使用weakSelf调用这个方法,并且这个方法里有self的属性,block不会造成内存泄露

    * 当block不是self的属性时,block内部使用self也不会造成内存泄露

    * 当使用类方法有block作为参数使用时,block内部使用self也不会造成内存泄露

    * 如果self没有直接或间接强引用block,则block中不需要用weakSelf,例如 Masony、AFNetWorking

    相关文章

      网友评论

          本文标题:block

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