前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS开发-获取全部环境变量iOS开发-获取全部环境变量

iOS开发-获取全部环境变量iOS开发-获取全部环境变量

作者头像
用户8893176
发布2021-08-09 11:21:05
1.6K0
发布2021-08-09 11:21:05
举报
文章被收录于专栏:小黑娃Henry

在日常的开发中,有时候需要配置环境变量来简化开发。

1、 环境变量的设置

在Xcode中选中Target然后打开Edit Scheme,当前打开OBJC_PRINT_LOAD_METHODS环境变量。

  • OBJC_PRINT_LOAD_METHODS: 打印出项目中所有load方法的调用,可以方便开发中监控load方法数量(load方法是会影响启动速度)。
1.1 输出结果
  • 打开load方法的打印"开关"之后,可以看到在lldb中打印出所有load方法的调用,当然有系统的、还有开发者自定义的(+HRTest load)

2、 获取所有环境变量

在当前objc-818中系统共提供了44个环境变量

2.1 通过objc获取

OC底层探索02- objc4-781 源码编译中有objc4-818可执行源码的获取方式。

libobjc4-818中搜索_objc_init。发现了environ_init();有关于环境变量初始化方法的相关线索。

代码语言:javascript
复制
void environ_init(void) 
{
    ...
   //在该方法的最下方添加下面的代码
for (size_t i = 0; i < sizeof(Settings)/sizeof(Settings[0]); i++) {
        const option_t *opt = &Settings[i];
        _objc_inform("%s: %s", opt->env, opt->help);
        _objc_inform("%s is set", opt->env);
    }
}
  • 然后执行代码就可以看到lldb中的打印了。
2.2 终端方式

在终端的任意位置输入:export OBJC_HELP=1

3、环境变量汇总

环境变量

说明

OBJC_PRINT_OPTIONS

输出OBJC已设置的选项

OBJC_PRINT_IMAGES

输出已load的image信息

OBJC_PRINT_LOAD_METHODS

打印 Class 及 Category 的 + (void)load 方法的调用信息

OBJC_PRINT_INITIALIZE_METHODS

打印 Class 的 + (void)initialize 的调用信息

OBJC_PRINT_RESOLVED_METHODS

打印通过 +resolveClassMethod: 或 +resolveInstanceMethod: 生成的类方法

OBJC_PRINT_CLASS_SETUP

打印 Class 及 Category 的设置过程

OBJC_PRINT_PROTOCOL_SETUP

打印 Protocol 的设置过程

OBJC_PRINT_IVAR_SETUP

打印 Ivar 的设置过程

OBJC_PRINT_VTABLE_SETUP

打印 vtable 的设置过程

OBJC_PRINT_VTABLE_IMAGES

打印 vtable 被覆盖的方法

OBJC_PRINT_CACHE_SETUP

打印方法缓存的设置过程

OBJC_PRINT_FUTURE_CLASSES

打印从 CFType 无缝转换到 NSObject 将要使用的类(如 CFArrayRef 到 NSArray * )

OBJC_PRINT_GC

打印一些垃圾回收操作

OBJC_PRINT_PREOPTIMIZATION

打印 dyld 共享缓存优化前的问候语

OBJC_PRINT_CXX_CTORS

打印类实例中的 C++ 对象的构造与析构调用

OBJC_PRINT_EXCEPTIONS

打印异常处理

OBJC_PRINT_EXCEPTION_THROW

打印所有异常抛出时的 Backtrace

OBJC_PRINT_ALT_HANDLERS

打印 alt 操作异常处理

OBJC_PRINT_REPLACED_METHODS

打印被 Category 替换的方法

OBJC_PRINT_DEPRECATION_WARNINGS

打印所有过时的方法调用

OBJC_PRINT_POOL_HIGHWATER

打印 autoreleasepool 高水位警告

OBJC_PRINT_CUSTOM_RR

打印含有未优化的自定义 retain/release 方法的类

OBJC_PRINT_CUSTOM_AWZ

打印含有未优化的自定义 allocWithZone 方法的类

OBJC_PRINT_RAW_ISA

打印需要访问原始 isa 指针的类

OBJC_DEBUG_UNLOAD

卸载有不良行为的 Bundle 时打印警告

OBJC_DEBUG_FRAGILE_SUPERCLASSES

当子类可能被对父类的修改破坏时打印警告

OBJC_DEBUG_FINALIZERS

警告实现了 -dealloc 却没有实现 -finalize 的类

OBJC_DEBUG_NIL_SYNC

警告 @synchronized(nil) 调用,这种情况不会加锁

OBJC_DEBUG_NONFRAGILE_IVARS

打印突发地重新布置 non-fragile ivars 的行为

OBJC_DEBUG_ALT_HANDLERS

记录更多的 alt 操作错误信息

OBJC_DEBUG_MISSING_POOLS

警告没有 pool 的情况下使用 autorelease,可能内存泄漏

OBJC_DEBUG_DUPLICATE_CLASSES

当出现类重名时停机

OBJC_USE_INTERNAL_ZONE

在一个专用的 malloc 区分配运行时数据

OBJC_DISABLE_GC

强行关闭自动垃圾回收,即使可执行文件需要垃圾回收

OBJC_DISABLE_VTABLES

关闭 vtable 分发

OBJC_DISABLE_PREOPTIMIZATION

关闭 dyld 共享缓存优化前的问候语

OBJC_DISABLE_TAGGED_POINTERS

关闭 NSNumber 等的 tagged pointer 优化

OBJC_DISABLE_NONPOINTER_ISA

关闭 non-pointer isa 字段的访问

总结

掌握了这些环境变量,可以帮助我们在以后开发中事半功倍。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/6/22 下,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、 环境变量的设置
    • 1.1 输出结果
    • 2、 获取所有环境变量
      • 2.1 通过objc获取
        • 2.2 终端方式
        • 3、环境变量汇总
        • 总结
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档