__attribute__((format()))  
这个format有3个参数。

int my(NSString *str,NSString *str1,NSArray*str2,...) __attribute__((format(__NSString__,2,4)));

三个参数告诉编译器,第二个参数必须是NSString类型,且可变参数从第4位开始。

如果你把第二个参数改成别的类型,或者加一个参数,使可变参数变成了第五个,这都是不行的。

__attribute__((nonnull()))  
这个参数可以无数多个

int my(NSString *str,NSString *str1,NSArray*str2,...) __attribute__((nonnull(1,3)));

这个的意思是,第一个和第三个参数不能为空。

__attribute__((noreturn))
此方法没有参数,表示这个函数没有返回值也不能有返回值。

__attribute__((const))  
这个表示一个方法的返回值只由参数决定,如果参数不变的话,就不再调用此函数,直接返回值。

经过我的尝试发现还是调用了,后又经查资料发现要给gcc加一个-O的参数才可以。是对函数调用的一种优化。

__attribute__((availability))
__attribute__((availability(ios,introduced=2_0,deprecated=7_0)));

表示此函数应用于ios平台,从2.0版本到7.0版本.

这种调用在foundation头文件中经常见到,一些比较著名,存在时间比较长的开源库也有。

__attribute__((unused))
表示函数的返回值必须被检查或使用,否则会警告。

__attribute__((used))
表示函数可能不会调用、可能用不到,编译器不要提醒

__attribute__((cold))
表示函数不经常调用

__attribute__((cleanup()))
可以定义一个变量,在他的作用域结束的时候会自动执行一个指定的方法,该方法执行在dealloc之前。

#define onExit\
__strong void(^block)(void) __attribute__((cleanup(blockCleanUp), unused)) = ^

一个巧妙的用法就是像上面一样定义一个宏,然后

{
onExit {
NSLog(@"yo");
};
}
在这个onExit中的代码就会在最后执行,这段是在sunnyxx的博客中看到的,应用于reactive cocoa。

__attribute__((always_inline))
这段代码能够保证代码是内联的,因为你如果只定义内联的话,编译器并不一定会以内联的方式调用,如果代码太多你就算用了内联也不一定会内联,用了这个的话会强制内联。

static __inline__ __attribute__((always_inline))

将这段代码定义成一个宏,然在函数的前边就能直接强制内联,如果是频繁调用的函数,这样可以提高一定的效率。

在系统的base.h文件中,苹果为很多属性定义了宏,有下面这些

#define OS_NORETURN __attribute__((__noreturn__))  
#define OS_NOTHROW __attribute__((__nothrow__))  
#define OS_NONNULL1 __attribute__((__nonnull__(1)))  
#define OS_NONNULL2 __attribute__((__nonnull__(2)))  
#define OS_NONNULL3 __attribute__((__nonnull__(3)))  
#define OS_NONNULL4 __attribute__((__nonnull__(4)))  
#define OS_NONNULL5 __attribute__((__nonnull__(5)))  
#define OS_NONNULL6 __attribute__((__nonnull__(6)))  
#define OS_NONNULL7 __attribute__((__nonnull__(7)))  
#define OS_NONNULL8 __attribute__((__nonnull__(8)))  
#define OS_NONNULL9 __attribute__((__nonnull__(9)))  
#define OS_NONNULL10 __attribute__((__nonnull__(10)))  
#define OS_NONNULL11 __attribute__((__nonnull__(11)))  
#define OS_NONNULL12 __attribute__((__nonnull__(12)))  
#define OS_NONNULL13 __attribute__((__nonnull__(13)))  
#define OS_NONNULL14 __attribute__((__nonnull__(14)))  
#define OS_NONNULL15 __attribute__((__nonnull__(15)))  
#define OS_NONNULL_ALL __attribute__((__nonnull__))  
#define OS_SENTINEL __attribute__((__sentinel__))  
#define OS_PURE __attribute__((__pure__))  
#define OS_CONST __attribute__((__const__))  
#define OS_WARN_RESULT __attribute__((__warn_unused_result__))  
#define OS_MALLOC __attribute__((__malloc__))  
#define OS_USED __attribute__((__used__))  
#define OS_UNUSED __attribute__((__unused__))  
#define OS_WEAK __attribute__((__weak__))  
#define OS_WEAK_IMPORT __attribute__((__weak_import__))  
#define OS_NOINLINE __attribute__((__noinline__))  
#define OS_ALWAYS_INLINE __attribute__((__always_inline__))  
#define OS_TRANSPARENT_UNION __attribute__((__transparent_union__))  
#define OS_ALIGNED(n) __attribute__((__aligned__((n))))  
#define OS_FORMAT_PRINTF(x,y) __attribute__((__format__(printf,x,y)))  
#define OS_EXPORT extern __attribute__((__visibility__("default")))  
#define OS_INLINE static __inline__  
#define OS_EXPECT(x, v) __builtin_expect((x), (v))  
都是可以直接使用的。

__attribute__的一些相关属性的更多相关文章

  1. 随手记一次用C#正则表达式获取下拉菜单html标签<select>以及相关属性值

    随手记一次用C#正则表达式获取下拉菜单html标签<select>以及相关属性值 1:有如下html: .................. <select id="aaa ...

  2. css中的大小、定位、轮廓相关属性

    css中的大小.定位.轮廓相关属性 1.通过height.width属性控制组件大小 height:高度,可以设置任何有效的距离值: width:宽度,可以设置任何有效的属性值: max-height ...

  3. css中的背景、边框、补丁相关属性

    css中的背景.边框.补丁相关属性 关于背景涉及到背景颜色与背景图片 背景颜色background-color即可设定: 背景图片background-image即可设定: 但是背景图片还涉及到其他的 ...

  4. Activity Intent Flags及Task相关属性

    转自http://www.cnblogs.com/lwbqqyumidi/p/3775479.html 今天我们来讲一下Activity的task相关内容. 上次我们讲到Activity的四种启动模式 ...

  5. AndroidManifest.xml中<activity></activity>相关属性说明

    虽说,从事android开发有一定时间了,对于Activity大家也都不陌生,但是具体的对于Activity中相关属性的含义有必要做一个系统的总结: intent-filteraction: 来指定响 ...

  6. css中的字体及文本相关属性

    css中的字体及文本相关属性 1.字体相关属性 字体主要可以设置color.font-family.font-size.font-size-adjust.font-stretch.font-style ...

  7. Android总结篇系列:Activity Intent Flags及Task相关属性

    同上文一样,本文主要引用自网上现有博文,并加上一些自己的理解,在此感谢原作者. 原文地址: http://blog.csdn.net/liuhe688/article/details/6761337 ...

  8. IOS开发UI基础UITextView相关属性

    UITextView相关属性 •    text: 设置textView中文本_textView.text = @"Now is the time for all good develope ...

  9. IOS开发UI基础UITextFidle相关属性

    UITextFidle相关属性 •    enablesReturnKeyAutomatically默认为No,如果设置为Yes,文本框中没有输入任何字符的话,右下角的返回按钮是disabled的. ...

随机推荐

  1. the confilict between validation and readonly in jquery

    How can I disable jquery validation on readonly fields? http://stackoverflow.com/questions/10803294/ ...

  2. lsof 查看端口占用的进程ID

    1. nohup execute >/dev/null 2>&1 & 提交了一个后台jobs 2. 然后查看一下 哪个进程正在用 3. yum 安装lsof yum ins ...

  3. node.js依赖express解析post请求四种数据格式()

    分别是这四种: www-form-urlencoded, form-data, application/json, text/xml www-form-urlencoded 这是http的post请求 ...

  4. 与spring整合就是为了不用自己创建bean 让spring帮助我们创建bean

    与spring整合就是为了不用自己创建bean  让spring帮助我们创建bean

  5. BZOJ3417[Poi2013]Tales of seafaring——BFS

    题目描述 Young Bytensson loves to hang out in the port tavern, where he often listens to the sea dogs te ...

  6. P3201 [HNOI2009]梦幻布丁

    题目描述 N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1,2,2,1的四个布丁一共有3段颜色. 输入输出格式 输入格式: 第 ...

  7. hdu 4897 Little Devil I (树链剖分+线段树)

    题目链接:  http://acm.hdu.edu.cn/showproblem.php?pid=4897 题意: 给你一棵树,一开始每条边都是白色,有三种操作: 1.将 u - v路径上的边转换颜色 ...

  8. poj 2236 Wireless Network (并查集)

    链接:http://poj.org/problem?id=2236 题意: 有一个计算机网络,n台计算机全部坏了,给你两种操作: 1.O x 修复第x台计算机 2.S x,y 判断两台计算机是否联通 ...

  9. Python3网络爬虫(3):使用User Agent和代理IP隐藏身份

    Python版本: python3 IDE: pycharm2017.3.3 一.为何要设置User Agent 有一些网站不喜欢被爬虫访问,所以会检测对象,如果是爬虫程序,他就会不让你访问,通过设置 ...

  10. MT【71】数列裂项放缩题

    已知${a_n}$满足$a_1=1,a_{n+1}=(1+\frac{1}{n^2+n})a_n.$证明:当$n\in N^+$时, $(1)a_{n+1}>a_n.(2)\frac{2n}{n ...