objc_root_class
用法:
__attribute__((objc_root_class))
@interface MyRootObject
@end
用途:
用于声明一个根类。在Objective-C中,有一个默认的编译Flag-Wobjc-root-class
,即不允许声明一个不继承自NSObject
的class
。使用这个Attribute就可以声明自定义的一个根类。
关于Root class,Apple的文档戳这里
至于自己的根类有什么用处,我也不太清楚。能知道的是,由于不继承自NSObject,意味着没有-alloc
,-init
等方法。似乎是没办法实例化的。
naked
用法
void foo() __attribute__((naked));
用途
llvm这样说的
This attribute disables prologue / epilogue emission for the function. This can have very system-specific consequences.
函数调用/返回时会有一些额外的工作,即对栈进行一系列操作参考1 2 3。这个Attribute会使编译器对该函数不做任何事,所以叫naked :)。在一些底层开始时会用到,比如,实现中断函数,或者直接用asm实现函数。如:
void foo() __attribute__((naked)) {
__asm__ __volatile__ ("nop\n");
}
结语
先告一段落。前面写了4篇,最后一篇东西不多,后面发现有意思的且比较简单的Attribute也不太多了。具体还是只能细读Clang的文档。
其他参考
gnu
llvm
clang language extensions
原作写于segmentfault 链接
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。