#import <Foundation/Foundation.h>

//延迟执行,delayFunc函数即为延迟执行的函数
#define onExit\
__strong void (^block)() __attribute__((cleanup(delayFunc),unused)) = ^ void delayFunc(__strong void (^*block)()){
(*block)();
} //在main函数执行之前执行的函数
__attribute__((constructor)) void ExecuteBefore_main(){
printf("ExecuteBefore_main\n");
} __attribute__((destructor)) void ExecuteAfter_main(){
printf("ExecuteAfter_main\n");
} //函数可用性
void functionDeprecatedAndObsoleteWarningAndError() __attribute__ ((availability(macosx,introduced=10.4,deprecated=10.10,obsoleted=10.13))); void functionDeprecatedAndObsoleteWarningAndError(void){ } //返回值未使用
int returnValueNotUnusedWarning() __attribute__ ((warn_unused_result)); int returnValueNotUnusedWarning(){
return ;
} int main(int argc, const char * argv[]) {
@autoreleasepool { printf("Hello, World!\n"); functionDeprecatedAndObsoleteWarningAndError();
returnValueNotUnusedWarning();
onExit{
printf("onExit\n");
};
}
return ;
}

Objective-C 源码初探 __attribute__的更多相关文章

  1. Catalyst揭秘 Day2 Catalyst源码初探

    Catalyst揭秘 Day2 Catalyst源码初探 这节课从源码角度来讲catalyst. 首先有一个观点要澄清,就是技术不是越底层就越是性能和效率更高.因为除了指令执行性能以外,更重要的是架构 ...

  2. Servlet源码初探

    年底,公司的事情告一段落,就来捣鼓一下这个Servlet源码,为下一步的spingmvc源码初探做准备 1.Servlet接口 public interface Servlet { void init ...

  3. 【一起学源码-微服务】Feign 源码一:源码初探,通过Demo Debug Feign源码

    前言 前情回顾 上一讲深入的讲解了Ribbon的初始化过程及Ribbon与Eureka的整合代码,与Eureka整合的类就是DiscoveryEnableNIWSServerList,同时在Dynam ...

  4. RequireJS源码初探

    前两天跟着叶小钗的博客,看了下RequireJS的源码,大体了解了其中的执行过程.不过在何时进行依赖项的加载,以及具体的代码在何处执行,还没有搞透彻,奈何能力不够,只能先记录一下了. RequireJ ...

  5. Spring IOC容器启动流程源码解析(一)——容器概念详解及源码初探

    目录 1. 前言 1.1 IOC容器到底是什么 1.2 BeanFactory和ApplicationContext的联系以及区别 1.3 解读IOC容器启动流程的意义 1.4 如何有效的阅读源码 2 ...

  6. React Native IOS源码初探

    原文链接 http://www.open-open.com/lib/view/open1465637638193.html 每个项目都有一个入口,然后进行初始化操作,React Native 也不例外 ...

  7. 【原创】JAVA并发编程——Callable和Future源码初探

    JAVA多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.其中前两种方式线程执行完后都没 ...

  8. Selenium3笔记-WebDriver源码初探

    Selenium3 有哪些变化? 其实相对于与Selenium2,Selenium3没有做太多的改动.下面给出官方的文档说明,供参考. 参考文档:https://seleniumhq.wordpres ...

  9. 【一起学源码-微服务】Netflix Eureka 源码一:Netflix Eureka 源码初探,我们为什么要读源码?

    前言 最近发现 网上好多自己的博客,很多朋友转载了文章却不加下 原载地址,本文欢迎转载一起学习,请在目录出加上原出处,感谢.转载来自:博客(一枝花算不算浪漫) 看了前面几篇文章的小伙伴知道,前几天在学 ...

随机推荐

  1. 用RMAN备份EBS数据库的脚本

    rman_bak.sh rman target / nocatalog log=/d01/rmanbak/bak_`date +%m%d%H%M`.log<< EOF  run  {  c ...

  2. rabbitmq

    send端 import pika credentials = pika.PlainCredentials(') connection = pika.BlockingConnection(pika.C ...

  3. python基础八

    面向对象的好处 更容易扩展.提高代码使用效率,使你的代码组织性更强, 更清晰,更适合复杂项目的开发 封装 把功能的实现细节封装起来,只暴露调用接口 继承 多态 接口的继承 定义 类   ===> ...

  4. C语言 活动安排问题之二

    有若干个活动,第i个开始时间和结束时间是[Si,fi),活动之间不能交叠,要把活动都安排完,至少需要几个教室? #include <stdio.h> #include <string ...

  5. powershell使用

    主要语法点: -match -notmatch -replace -join -split -and -or -xor -not ! +.-.*./.% =.+=.-=.*=./=.%= -eq.-n ...

  6. hibernate id 策略

    @Id@GeneratedValue(generator = "paymentableGenerator")@GenericGenerator(name = "payme ...

  7. kettle转换和作业插件开发及调试

    这是一篇几年前写下的文档,最近打算根据这篇文档重写一下kettle插件的教程.结果各种理由,一推再推.今天索性将这篇文档发布出来,分享给大家,例子等有空再补上.这是一篇基于kettle3.2基础上完成 ...

  8. RIDE -- Robot Framework setup

    RobotFramework 是一款基于python 的可以实现关键字驱动和数据驱动并能够生成比较漂亮的测试报告的一款测试框架 这里使用的环境是 python-2.7.10.amd64.msi RID ...

  9. JSP复习整理(五)JavaBean生命周期

    一.创建一个JavaBean UserBean.java package jsp.test; public class UserBean { private String userName; priv ...

  10. iOS 对象和json互相转换

    // 将字典或者数组转化为JSON串 - (NSData *)toJSONData:(id)theData { NSError *error = nil; NSData *jsonData = [NS ...