zoukankan      html  css  js  c++  java
  • iOS开发总结(A0)- block基础知识

    1. 定义block

    以返回NSInterger 接受bool 参数为例

    1)作为参数

    methodTakeBlockAsParamter: (NSInteger (^) (BOOL flag))blockName

    2) 作为变量或者property

    @property(copy, nonatomic)  NSInteger (^blockName) (BOOL flag); 

    3)typedef

    typedef  NSInteger (^blockName) (BOOL flag);

     4) 作为方法返回值

    (NSInteger (^)(BOOL flag))

    2. 使用注意

    1) 若在block 中设置block范围以外的变量,需要在变量加__block 标识(两个连续的下划线)

    2) 若在block 中引用了拥有(strong 或者 retain)该block的对象,则构成了retain cycle, 需要创建一个指向该对象的变量,并用 __weak标志;  

    3. 关于循环引用。

    为了解除循环引用,在block外面使用__weak。在很多地方看到,为了保证weak 对象不在block中释放,在block 里面再使用__strong。

    问题是不管是 weak 还是strong,都是一个对象(如self),为什么在block中对weak进行strong,就不会造成循环引用呢?

    这个问题先放在这,过段时间来补充 (实际上已经不是完全相同的对象了, 有一个中间态)

  • 相关阅读:
    《Python 源码阅读》之 类型Type
    《Python 源码剖析》之对象
    KMP匹配算法
    Python的递归深度
    js验证手机号
    Jquery 实现 “下次自动登录” 记住用户名密码功能
    js注册读秒进度条
    div+css进度条
    SprignMVC+myBatis整合
    ssm控制输出sql(二)
  • 原文地址:https://www.cnblogs.com/beddup/p/4621580.html
Copyright © 2011-2022 走看看