在日常的开发中,有时候需要配置环境变量来简化开发。
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();
有关于环境变量初始化方法的相关线索。
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 字段的访问 |
总结
掌握了这些环境变量,可以帮助我们在以后开发中事半功倍。