Clang Attributes 是 Clang 提供的一种源码注解,方便开发者向编译器表达某种要求,参与控制如 Static Analyzer、Name Mangling、Code Generation 等过程,一般以__attribute__(xxx)
的形式出现在代码中;为方便使用,一些常用属性也被 Cocoa 定义成宏,比如在系统头文件中经常出现的NS_CLASS_AVAILABLE_IOS(9_0)
就是 __attribute__(availability(...))
这个属性的简单写法。
常见属性的介绍,可以看 NSHipster 的介绍文章 和的 twitter 的介绍文章。本文还会介绍几个有意思的“黑魔法” Attribute,说不定在某些场景下会起到意想不到的效果哦~
以下测试都以 Xcode 7.3 ( Clang 3.8 ) 为准
objc_subclassing_restricted
使用这个属性可以定义一个 Final Class
,也就是说,一个不可被继承的类,假设我们有个名叫 Eunuch(太监)
的类,但并不希望有人可以继承自它:
@interface Eunuch : NSObject
@end
@interface Child : Eunuch // 太监不能够有孩砸
@end
只要在 @interface 前面加上 objc_subclassing_restricted
这个属性即可:
__attribute__((objc_subclassing_restricted))
@interface Eunuch : NSObject
@end
@interface Child : Eunuch // <--- Compile Error
@end
objc_requires_super
aka: NS_REQUIRES_SUPER
,标志子类继承这个方