Objective-C 源码初探 __attribute__


#import <Foundation/Foundation.h>
#define onExit\
    __strong void (^block)() __attribute__((cleanup(cleanup),unused)) = ^

__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 1;
}

void cleanup(__strong void (^*block)()){
    (*block)();
}

int main(int argc, const char * argv[]) {
    @autoreleasepool {

        printf("Hello, World!\n");

        functionDeprecatedAndObsoleteWarningAndError();
        returnValueNotUnusedWarning();
        onExit{
            printf("onExit\n");
        };
    }
    return 0;
}
时间: 2024-08-03 01:36:19

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

minidlna源码初探(二)—— SSDP设备发现的大致流程

前言: 之前有专文介绍了minidlna中的UPNP功能,内中介绍其中包含的SSDP(简单发现协议),SOAP(简单对象访问协议)等几个协议(http://blog.csdn.net/sakaue/article/details/19070735).本文将根据minidlna的程序流程,概述SSDP的流程,为下一部分ACE实现做铺垫. 设备发现的大致流程: 首先,根据UPNP的规范: 在设备加入网络,UPnP发现协议允许设备向控制点广告它的服务.它使用向一个标准地址和端口多址传送发现消息来实现.

Servlet源码初探

年底,公司的事情告一段落,就来捣鼓一下这个Servlet源码,为下一步的spingmvc源码初探做准备 1.Servlet接口 public interface Servlet { void init(ServletConfig var1) throws ServletException; ServletConfig getServletConfig(); void service(ServletRequest var1, ServletResponse var2) throws Servlet

React Native IOS源码初探

原文链接 http://www.open-open.com/lib/view/open1465637638193.html 每个项目都有一个入口,然后进行初始化操作,React Native 也不例外.一个不含 Objective-C 代码的项目留给我们的唯一线索就是位于 AppDelegate 文件中的代码: RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation moduleName:@"re

[java学习]java容器源码初探(1)

一.动态数组ArrayList 在我们开发者眼中,这就是一个"动态数组",可以"动态"地调整数组的大小,虽然说数组从定义了长度后,就不能改变大小. 实现"动态"调整的基本原理就是:按照某个调整策略,重新创建一个调整后一样大小的数组,然后将原来的数组赋值回去. 下面我们来解析一下几个与数组不一样的方法. 看看ArrayList中主要的几个字段(源码剖析): // 默认的初始数组大小 private static final int DEFAULT_

Selenium3笔记-WebDriver源码初探

Selenium3 有哪些变化? 其实相对于与Selenium2,Selenium3没有做太多的改动.下面给出官方的文档说明,供参考. 参考文档:https://seleniumhq.wordpress.com/2013/08/28/the-road-to-selenium-3/ "We aim for Selenium 3 to be "a tool for user-focused automation of mobile and web apps",Developers

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

JAVA多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用ExecutorService.Callable.Future实现有返回结果的多线程.其中前两种方式线程执行完后都没有返回值,只有最后一种是带返回值的. thread和runnable不讨论了. 太多地方可以找到他们的探究了 重点看callable和future, 先上一段代码: package com.future.chenjun.test; import java.util.concurrent.Callab

RxJava源码初探

Demo分析 响应式编程的概念现在火的一塌糊涂,各种RxXXX库层出不穷,虽然这些库的实现语言各不相同,但是原理都是一样的.我的理解是这些库主要都包含三个东西:Observable, OnSubscribe, Subscriber.阅读本文的读者必须懂的这些概念,初学者建议看下RxJava专题 上的文章再来看本文.我们就从源码层级来分析一下这中间的事件流,线程切换是怎么个原理.这里交代下本文分析的RxJava的版本是1.1.0 先来看个简单的Demo实例 Observable.create(ne

快速理解RxJava源码的设计理念

前言 我在看过几篇关于RxJava源码分析的博客后,不知是我的水平有限还是源码过于博大精深,导致花了很长的时间才搞清楚其运行原理.我个人觉得应该有更好的办法来快速剖析理解,于是决定写下本文. 本文适合已经看过一些RxJava源码分析资料的同学,不过没看过也没关系.在看本文时可参考这篇博客:RxJava基本流程和lift源码分析,它说得比较全,在此感谢博主大头鬼Bruce. 一.初探RxJava [以下摘录了RxJava基本流程和lift源码分析] 我们先来看一段最基本的代码,分析这段代码在RxJ

【一起学源码-微服务】Nexflix Eureka 源码十三:Eureka源码解读完结撒花篇~!

前言 想说的话 [一起学源码-微服务-Netflix Eureka]专栏到这里就已经全部结束了. 实话实说,从最开始Eureka Server和Eureka Client初始化的流程还是一脸闷逼,到现在Eureka各种操作都了然于心了. 本专栏从12.17开始写,一直到今天12.30(文章在平台是延后发布的),这将近半个月的时间确实收获很多.每天都会保持一定的时间学习,只要肯下功夫,没有学不会的东西. 2020年将继续保持学习的节奏,自己定的目标是把spring cloud几个重要的组件都学一遍