本文源自本人的学习记录整理与理解,其中参考阅读了部分优秀的博客和书籍,尽量以通俗简单的语句转述。引用到的地方如有遗漏或未能一一列举原文出处还望见谅与指出,另文章内容如有不妥之处还望指教,万分感谢。
Xcode常用宏
| 宏名称 |
说明 |
__FILE__ |
当前文件所在目录 |
__DATE__ |
编译日期的字符串,格式为“mm dd yyyy”(例如:“Sep 16 2015”) |
__FUNCTION__ |
当前函数名称 |
__LINE__ |
当前语句在源文件中的行数 |
__TIME__ |
编译时间的字符串,格式为“hh:mm:ss”(如:“11:04:59”) |
__STDC__ |
整数常量1,表示此编译器遵循ISOC标准 |
__STDC_VERSION__ |
如果实现复合C89整部1,则这个宏的值为19940SL;如果实现符合C99,则这个宏的值为199901L;否则数值是未定义 |
__STDC_EOBTED__ |
(C99)实现为宿主实现时为1,实现为独立实现为0 |
__STDC_IEC_559__ |
(C99)浮点数实现复合IBC 60559标准时定义为1,否者数值是未定义 |
__STDC_IEC_559_COMPLEX__ |
(C99)复数运算实现复合IBC 60559标准时定义为1,否者数值是未定义 |
__STDC_ISO_10646__ |
(C99)定义为长整型常量,yyyymmL表示wchar_t值复合ISO 10646标准及其指定年月的修订补充,否则数值未定义 |
Xcode中类模板预定义宏变量
| 宏变量 |
说明 |
___FILENAME___ |
文件名,包括扩展名 如 abc.h, abc.m |
___FILEBASENAMEASIDENTIFIER___ |
文件名, 不包括扩展名, 如 abc |
___PROJECTNAME___ |
项目名称 |
___PROJECTNAMEASIDENTIFIER___ |
C风格的项目名称 |
___USERNAME___ |
用户名称 |
___FULLUSERNAME___ |
用户名全称 |
___ORGANIZATIONNAME___ |
公司名称 |
___DATE___ |
日期, 如 15/9/18 |
___TIME___ |
时间, 如 下午2:35 |
___YEAR___ |
四位数的年限 如 2015 |
Xcode环境变量说明
Apple官方说明: Xcode Build Setting Reference
| 环境变量 |
说明 |
$(SRCROOT) |
工程所在位置,也就是.xcodeproj所在目录 |
$(PROJECT_DIR) |
与 $(SRCROOT) 一样 |
$(TARGETNAME) |
工程名称 |
$(TARGET_BUILD_DIR) |
目录生成路径 |
$(PROJECT_TEMP_DIR) |
工程生成临时文件的路径 |
$(CONFIGURATION) |
配置类型,一般为”Debug” 或 “Release” |
$(EFFECTIVE_PLATFORM_NAME) |
有效的平台名称,如 “-iphoneos” |
$(USER) |
登陆系统的用户名 |
$(WRAPPER_NAME) |
应用程序名称,包括扩展名 如”abc.app” |
$(WRAPPER_EXTENSION) |
扩展名 如”app” |
| 环境变量 |
说明 |
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 字段的访问 |