zoukankan      html  css  js  c++  java
  • iOS---OBJC_ASSOCIATION_ASSIGN可能引起的Crash

    //OBJC_ASSOCIATION_ASSIGN类似于我们常用的assign,assign策略的特点就是在对象释放以后,不会主动将应用的对象置为nil,这样会有访问僵尸对象导致应用崩溃的风险。为了解决这个问题:我们可以创建一个替身对象,以OBJC_ASSOCIATION_RETAIN_NONATOMIC 的策略来强引用替身对象,然后在对象中以weak的策略去引用我们真实需要保护的对象。这样就能解决这个可能导致崩溃的问题了。

    //结论:将OBJC_ASSOCIATION_ASSIGN改为OBJC_ASSOCIATION_RETAIN,这样在本对象有一个强引用,这个被关联的对象也就不会被释放,生命周期也和本对象相同了。我认为既然关联对象传入的都是对象,那么其实绝大多时候用的应该是OBJC_ASSOCIATION_RETAIN,在我们项目中传入的对象很多是NSNumber类型(包装的bool或则int)的时候都是用的OBJC_ASSOCIATION_ASSIGN,以前没暴露问题也是误打误撞错进错出。所以除了一些需要破解循环引用的场景,关联对象的内存操作修饰符建议都用OBJC_ASSOCIATION_RETAIN

  • 相关阅读:
    Find a way(两个BFS)
    ACM代码模板
    ElasticSearch-集群
    ElasticSearch-倒排索引
    ElasticSearch-IK分词器
    ElasticSearch-数据类型
    ElasticSearch-REST APIS
    cmd命令行中的errorlevel和延迟赋值
    ubuntu 12.04内核升级到3.13.1
    ubuntu 12.04安装TP-LINK TL-WN725N v2
  • 原文地址:https://www.cnblogs.com/KiVen2015/p/11643154.html
Copyright © 2011-2022 走看看