美文网首页C++
Clang提供的源码注解__attribute__

Clang提供的源码注解__attribute__

作者: CatLogic | 来源:发表于2016-06-14 11:31 被阅读0次

Clang Attributes 是 Clang 提供的一种源码注解,方便开发者向编译器表达某种要求.在恰当的实际使用,可以达到一些黑魔法般的效果。

简单汇总

__attribute__((xxx))
objc_subclassing_restricted 子类不能继承
objc_requires_super     必须调用父类实现
objc_boxable            语法糖
constructor / destructor    构造器和析构器(构造器 在load方法后,main方法前,即类加载进内存,但未执行入口方法时)
overloadable  函数重载
objc_runtime_name   运行时改名字(采用映射时需特别注意)
unavailable("alloc方法不可用,请用initWithName:")

用法示例

博主较懒,因此此处简单介绍三种,其余自学

1.子类必须调用父类实现

此处有Person类和Son类,Person有 - (void)say 方法;
- (void)say __attribute__((objc_requires_super));
在子类必须重写该方法时必须掉用父类的,否则编译器会给出警告

编译器警告.png
在调用父类实现 [super say]; 之后警告消除

2.语法糖
此处构造一个结构体,通过语法糖可以让value直接通过 @() 封装起来,十分方便快捷。

typedef struct __attribute__((objc_boxable)) {
 CGFloat width,height;
} YHRect;

YHRect rect = {1,2};
NSValue *value = @(rect);
YHRect rect2;
[value getValue:&rect2];
NSLog(@"%.2f - %.2f",rect2.width,rect2.height);

3.不可用
此处示例禁止了Person类的init方法,而采用自己定义的初始化方法。

- (instancetype)init __attribute__((unavailable("init方法不可用,请用initWithObj:")));
- (instancetype)initWithObj:(id)obj;

Person *person = [[Person alloc] init];
[person say];

此处编译器会报错,错误信息为


错误信息.png

看~灰机灰过来了~灰机又灰过去了

相关文章

  • Clang提供的源码注解__attribute__

    Clang Attributes 是 Clang 提供的一种源码注解,方便开发者向编译器表达某种要求.在恰当的实际...

  • iOS中一些__attribute__运用

    Clang Attributes是Clang提供的一种源码注解,方便开发者向编译器表达某种要求,参与控制如Stat...

  • 提示使用者方法不可用

    __ attribute __ 是Clang提供的一种源码注解,方便开发者向编译器表达某种要求,括号里是传达某种命...

  • 这些__attribute__的知识你应该知道

    序 最近查看在网上发现了个有趣的小玩意__attribute__, 也就是 Clang Attributes,这是...

  • Clang Attributes 黑魔法小记

    近期在学习公司源码时,遇到clang attribute实现的代码注解,summy的这篇文章已经有些年头了,结合实...

  • iOS 编译过程的原理和应用

    前言 __attribute__ Clang警告处理 预处理 插入编译期脚本 提高项目编译速度 iOS编译 编译器...

  • __attribute__((cleanup(function)

    __attribute__ 是一个编译命令, 可以为变量、函数、类型定义提供一些属性.__attribute__有...

  • objc_msgSend 消息发送之快速查找

    clang源码 当我们对一个方法调用 进行 clang源码之后 发现 方法的调用 底层实现为 objc_msgSe...

  • java-注解

    注解分类: 源码注解,编译注解,运行注解 源码注解:编译后的.class 后没有 boolean exists =...

  • java自定义注解

    一、注解按照运行机制分类: 源码注解:注解只在源码中存在,.class文件就没了编译时注解:注解在源码和.clas...

网友评论

    本文标题:Clang提供的源码注解__attribute__

    本文链接:https://www.haomeiwen.com/subject/uscudttx.html