黑魔法__attribute__((cleanup))】的更多相关文章

原文地址:http://blog.sunnyxx.com/2014/09/15/objc-attribute-cleanup/ 编译器属性__attribute__用于向编译器描述特殊的标识.检查或优化,几个常用的用法看<mattt大神的文章>就好.今天发现一个名为cleanup的黑魔法属性,简单介绍下. 基本用法 __attribute__((cleanup(...))),用于修饰一个变量,在它的作用域结束时可以自动执行一个指定的方法,如: 1 2 3 4 5 6 7 8 9 // 指定一个…
cleanup属性:当变量离开它的作用域时,设置的cleanup_function函数将被调用. cleanup (cleanup_function) The cleanup attribute runs a function when the variable goes out of scope. This attribute can only be applied to auto function scope variables; it may not be applied to param…
#import <Foundation/Foundation.h> //延迟执行,delayFunc函数即为延迟执行的函数 #define onExit\ __strong void (^block)() __attribute__((cleanup(delayFunc),unused)) = ^ void delayFunc(__strong void (^*block)()){ (*block)(); } //在main函数执行之前执行的函数 __attribute__((construc…
__attribute__((format()))  这个format有3个参数. int my(NSString *str,NSString *str1,NSArray*str2,...) __attribute__((format(__NSString__,2,4))); 三个参数告诉编译器,第二个参数必须是NSString类型,且可变参数从第4位开始. 如果你把第二个参数改成别的类型,或者加一个参数,使可变参数变成了第五个,这都是不行的. __attribute__((nonnull())…
关注仓库,及时获得更新:https://github.com/draveness/iOS-Source-Code-Analyze Follow: https://github.com/Draveness 这篇文章会对 libextobjc 中的一小部分代码进行分析,也是如何扩展 Objective-C 语言系列文章的第一篇,笔者会从 libextobjc 中选择一些黑魔法进行介绍. 对 Swift 稍有了解的人都知道,defer 在 Swift 语言中是一个关键字:在 defer 代码块中的代码…
最近在看一些源代码,遇到了一些使用__attribute__修饰函数和变量的属性方面的代码,不是太了解,很是汗颜,再此做个总结:   GCC使用__attribute__关键字来描述函数,变量和数据类型的属性,用于编译器对源代码的优化. 描述函数属性的几个重要的关键字:   void noreturnfun() __attribute__((noreturn));//函数不会返回. void centon() __attribute__((alias("__centon")));//设…
[说明]这篇文章本来发布在我个人网站的博客上,但由于:1,打算以cnblogs为家了:2. 关于智能指针部分需要修订,所有将修订版发在这里,作为第一篇文章. 常遇到的动态内存回收问题 在C++的编程过程中,我们经常需要申请一块动态内存,然后当用完以后将其释放.通常而言,我们的代码是这样的: 1: void func() 2: { 3: //allocate a dynamic memory 4: int *ptr = new int; 5:  6: //use ptr 7:  8: //rele…
在C++的编程过程中,我们经常需要申请一块动态内存,然后当用完以后将其释放.通常而言,我们的代码是这样的: 1: void func() 2: { 3: //allocate a dynamic memory 4: int *ptr = new int; 5: 6: //use ptr 7: 8: //release allocated memory 9: delete ptr; 10: ptr = NULL; 11: } 如果这个函数func()逻辑比较简单,问题不大,但是当中间的代码有可能抛…
算法沉思录:分而治之(复用): 分而治之是指把大而复杂的问题分解成若干个简单的小问题,然后逐个解决.这种朴素的思想来源于人们生活与工作的经验,也完全适合于技术领域. 要崩溃的节奏: 要崩溃的节奏: Variable Attributes libextobjc 实现的 defer 并没有基于 Objective-C 的动态特性,甚至也没有调用已有的任何方法,而是使用了 Variable Attributes 这一特性. 同样在 GCC 中也存在用于修饰函数的 Function Attributes…
sd-bus.h 例子 注意: sd-dbus 是systemd提供的lib,但是这个lib,只有在systemd>v221版本后才可以使用,centos 219版本太低,所以不能使用. 参考: http://0pointer.net/blog/the-new-sd-bus-api-of-systemd.html #cat print-unit-path.c #include <stdio.h> #include <string.h> #include <unistd.…