zoukankan      html  css  js  c++  java
  • iOS之Block

    使用Block是一个装逼神器,用不好就很容易出现循环引用等问题。

    一、Block我们使用的时copy属性,那为什么要用copy而不用其他的属性来修饰呢,其实原理比较简单:

    @property(nonatomic, readwrite, copy) completionBlock completionBlock;

    (1)正常我们使用Block是在栈上生成的,离开了栈作用域便释放了

    (2)如果 copy一个Block ,那么会将这个 Block copy到堆上分配,这样就不再受栈的限制,可以随意使用。

    二、Block的循环引用问题

    由于我们很多行为会导致 Blockcopy ,而当Block copy时,会对block 中用到的对象产生强引用 (ARC) 或者引用计数加一 (non-ARC)

    什么是循环引用?

    即 对象有一个Block属性,然而这个Block属性中又引用了对象的其他成员变量,那么就会对这个变量本身产生强应用,那么变量本身和他自己的 Block属性就形成了循环引用。

    那怎么解决Block的循环引用问题?

    ARC下
    1
    .__unsafe_unretained typeof(self) weakSelf = self; 2.__weak typeof(self) weakSelf = self; // 主要使用这个来解决 MRC下 __block typeof(self) weakSelf = self;
    self.completionBlock = ^ { if (weakSelf.success) { weakSelf.success(weakSelf.responseData); } };
  • 相关阅读:
    POJ1296
    BZOJ1003
    POJ1160
    中国剩余定理(转)
    组合数公式
    网络操作系统*习题
    网络操作系统*习题
    网络操作系统习题
    网络操作系统习题
    Access总结
  • 原文地址:https://www.cnblogs.com/ljmaque/p/Block.html
Copyright © 2011-2022 走看看