zoukankan      html  css  js  c++  java
  • 兼容arc和非arc的处理方法

    查看原文:http://www.heyuan110.com/archives/614
    1.如果是使用第三方的模块简单处理就是

    选择你编译的的target,build phases-->Compiled sources中,双击没用arc的文件,写-fno-objc-arc

    相应的,没开启ARC的工程单独为某文件开启arc,compile flag填 -fobjc-arc

    2.如果写一个需要兼容arc,非arc,gc等模块的时候我们可以使用预处理来判断一下

    #if(!__has_feature(objc_arc))
    [_someObj release];
    #endif
    也可以在你全局的pch中加入这个宏

    #ifndef OBJC_ARC_ENABLED
    #ifdef __has_feature
    #define OBJC_ARC_ENABLED __has_feature(objc_arc)
    #else
    #define OBJC_ARC_ENABLED 0
    #endif
    #endif
    以后判断就

    #if(OBJC_ARC_ENABLED)
    [_someObj release];
    #endif

    【附】下面给出一个完整的宏定义判断列表

    #if !defined(__clang__) || __clang_major__ < 3
    #ifndef __bridge
    #define __bridge
    #endif

    #ifndef __bridge_retain
    #define __bridge_retain
    #endif

    #ifndef __bridge_retained
    #define __bridge_retained
    #endif

    #ifndef __autoreleasing
    #define __autoreleasing
    #endif

    #ifndef __strong
    #define __strong
    #endif

    #ifndef __unsafe_unretained
    #define __unsafe_unretained
    #endif

    #ifndef __weak
    #define __weak
    #endif
    #endif

    //如果
    #if __has_feature(objc_arc)
    #define SAFE_ARC_PROP_RETAIN strong
    #define SAFE_ARC_RETAIN(x) (x)
    #define SAFE_ARC_RELEASE(x)
    #define SAFE_ARC_AUTORELEASE(x) (x)
    #define SAFE_ARC_BLOCK_COPY(x) (x)
    #define SAFE_ARC_BLOCK_RELEASE(x)
    #define SAFE_ARC_SUPER_DEALLOC()
    #define SAFE_ARC_AUTORELEASE_POOL_START() @autoreleasepool {
    #define SAFE_ARC_AUTORELEASE_POOL_END() }
    #else
    #define SAFE_ARC_PROP_RETAIN retain
    #define SAFE_ARC_RETAIN(x) ([(x) retain])
    #define SAFE_ARC_RELEASE(x) ([(x) release])
    #define SAFE_ARC_AUTORELEASE(x) ([(x) autorelease])
    #define SAFE_ARC_BLOCK_COPY(x) (Block_copy(x))
    #define SAFE_ARC_BLOCK_RELEASE(x) (Block_release(x))
    #define SAFE_ARC_SUPER_DEALLOC() ([super dealloc])
    #define SAFE_ARC_AUTORELEASE_POOL_START() NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    #define SAFE_ARC_AUTORELEASE_POOL_END() [pool release];
    #endif

  • 相关阅读:
    elasticsearch中多个字段聚合及java实现
    elasticsearch中must和should组合查询
    Hash(哈希/散列)表中冲突处理及命中计算
    PHP代码审计理解(一)----Metinfo5.0变量覆盖
    SSL 3.0 POODLE攻击信息泄露漏洞_CVE-2014-3566
    菜鸡试飞----SRCの信息收集手册
    python3-邮件发送-不同格式
    windows下常用快捷指令记忆
    杂记
    偶然碰到的编码转换技巧--叮!
  • 原文地址:https://www.cnblogs.com/ligun123/p/2956180.html
Copyright © 2011-2022 走看看