分为三种:
- 函数属性 (Function Attribute)
- 类型属性 (Variable Attribute )
- 变量属性 (Type Attribute )
语法构造
__attribute__ 语法格局为:__attribute__ ((attribute-list))
比如,在三方库中最常见的,声明一个属性或者办法在当前版本弃用了
- @property (strong,nonatomic)CLASSNAME * property __deprecated;
如许的好处是:给开辟者一个过渡的版本,闪开辟者知道这个属性被弃用了,应当应用最新的API,然则被__deprecated的属性仍然可以正常应用。如不雅直接弃用,会导致开辟者在更新Pod的时刻,代码无法运行了。
__attribtue__的应用处景很多,本文只列举iOS开辟中常用的几个:
- //弃用API,用作API更新
- #define __deprecated __attribute__((deprecated))
- //带描述信息的弃用
- #define __deprecated_msg(_msg) __attribute__((deprecated(_msg)))
- //碰到__unavailable的变量/办法,编译器直接抛出Error
- #define __unavailable __attribute__((unavailable))
- //告诉编译器,即使这个变量/办法 没被应用,也不要抛出警告
- #define __unused __attribute__((unused))
- //和__unused相反
- #define __used __attribute__((used))
- //如不雅不应用办法的返回值,进行警告
- #define __result_use_check __attribute__((__warn_unused_result__))
- //OC办法在Swift中弗采取
- #define __swift_unavailable(_msg) __attribute__((__availability__(swift, unavailable, message=_msg)))
Clang警告处理
你必定还见过如下代码:
这段代码的感化是
- 对当前编译情况进行压栈
- 忽视-Wundeclared-selector(未声明的)Selector警告
- 编译代码
- 对编译情况进行出栈
经由过程clang diagnostic push/pop,你可以灵活的┞菲握代码块的编译选项。
我在之前的一篇文┞仿里,具体的介绍了XCode的警告相干内容。本文篇幅限制,就不具体讲解了。
- iOS 合劳顿用Clang警告来进步代码质量
http://blog.csdn.net/Hello_Hwc/article/details/46425503
所谓预处理,就是在编译之前的处理。预处理可以或许让你定义编译器变量,实现前提编译。
比如,如许的代码很常见
- #ifdef DEBUG
- //...
- #else
- //...
- #endif
同样,我们同样也可以定义其他预处理变量,在XCode-选中Target-build settings中,搜刮proprecess。然后点击图中蓝色的加号,可以分别为debug和release两种模式设置预处理宏。
比如我们加上:TestServer,表示在这个宏中的代码运行在测试办事器
- CompileC ClassName.o ClassName.m normal x86_64 objective-c com.apple.compilers.llvm.clang.1_0.compiler
- export LANG=en_US.US-ASCII
- export PATH="..."
- clang -x objective-c -arch x86_64 -fmessage-length=0 -fobjc-arc... -Wno-missing-field-initializers ... -DDEBUG=1 ... -isysroot iPhoneSimulator10.1.sdk -fasm-blocks ... -I 上文提到的文件 -F 所须要的Framework -iquote 所须要的Framework ... -c ClassName.c -o ClassName.o
然后,合营多个Target(右键Target,选择Duplicate),零丁一个Target负责测试办事器。如许我们就不消每次切换测试办事器都要修改代码了。
- #ifdef TESTMODE
- //测试办事器相干的代码
- #else
- //临盆办事器相干代码
- #endif
平日,如不雅你应用CocoaPod来治理三方库,那么你的Build Phase是如许子的:
推荐阅读
早期进修 Node.js 的时刻 (2011-2012),有挺多是大年夜 PHP 转过来的,当时有部分人对于 Node.js 编辑完代码须要重启一下表示麻烦(PHP不须要这个过程),于是社区里的同伙就开端倡导应用 >>>详细阅读
本文标题:iOS编译过程的原理和应用
地址:http://www.17bianji.com/lsqh/34703.html
1/2 1