__attribute__的一些相关属性

__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))  
都是可以直接使用的。

原文地址:https://www.cnblogs.com/cyyljw/p/10730454.html

时间: 2024-10-14 06:28:15

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

cocos2dx 3.x以上(Sprite精灵类的相关属性与创建)

// //  MainScene.cpp //  helloworld // //  Created by apple on 16/9/19. // // #include "MainScene.hpp" Scene * MainScene::createScene() { auto scene = Scene::create(); //    CCScene * scene = CCScene::create();// 创建场景 //创建层 MainScene *layer = Ma

Cocos2d入门--1-- 初涉相关属性或代码

 Cocos2d入门--1-- 初涉相关属性或代码 Cocos2d vision:  cocos2d-x-3.8.1 万丈高楼,起于累土.对于一个游戏框架的学习,其实在于框架功能的使用积累,学会了如何在cocos2d游戏引擎的基础上使用它提供的各种功能,并灵活运用, 以及学会查阅Cocos2d官方提供的API文档.相信自己也能开发出自己喜爱或者让别人羡慕的游戏. 目录: 1>认识origin和visibleSize以及cocos2d的基础绘画类DrawNode的简单实用 2>认识 CCLOG(

前端笔记九,背景、边框和补丁相关属性

常用的背景相关属性:以下属性均在style内设置 background:设置对象的背景样式,不建议直接通过该属性来控制 background-attachment:设置背景图片是随对象内容滚动还是固定的,可选值: scroll:会随内容的滚动而滚动 fixed:背景图片固定 background-color:设置背景色,如果设置了背景图片则会覆盖背景色 background-image:设置背景图片,使用url()函数 background-position:设置对象的背景图片的位置,第一个表示

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

同上文一样,本文主要引用自网上现有博文,并加上一些自己的理解,在此感谢原作者. 原文地址: http://blog.csdn.net/liuhe688/article/details/6761337 -------------------------------------------------------------------------- 今天我们来讲一下Activity的task相关内容. 上次我们讲到Activity的四种启动模式的时候,已经了解到一些关于task的技术,今天我再向大

canvas相关属性使用

1.canvas按百分比画圆环 可以使用canvas的arc属性画出圆环,百分比部分换算成弧度即可. 2.canvas的font属性没法单独设置,必须设置两个及以上相关属性. 如果要通过传入的值来改变font属性的参数,可以通过正则匹配表达式,replace方法来实现, 如改变字号: context.font = "italic 12px/20px arial"; context.font = context.font.replace(/\d+(\.\d+)?(px|pt|em|%)/

css3背景、边框、和补丁相关属性

border :基本语法 border: border-width || border-style || border-color 默认值为: medium none . border-color 的默认值将采用文本颜色 相关属性: border-top,border-left,border-right,border-bottom:它们分别对边框的某个方向起作用,语法基本与border相同 border-bottom-color,border-top-color,border-bottom-co

extjs的相关属性

通用属性: labelSeparator:''//表示fieldLabel后不会显示冒号":" readOnly:true//只读 focusCls: 'txtHalfInput'//有焦点时的样式 maxLength:3, enforceMaxLength:true//输入位数check fieldStyle: 'margin-top:3px;'//display上下不对齐解决办法 Ext.button.Button 属性: enableToggle:true//设置按钮为开关状态

【html】学习记录-CSS的column相关属性

column相关属性: column-count:定义内容以多列形式显示 column-gap:定义每列之间的间距 示例: <section class="fourcolumn"> 人类或其他任何活着的个体,在生命之初不是放弃,不是自我唾弃,也不是对自己的存在进行诅咒.那些都是需要一个腐败和堕落的过程的,这一腐败的速度因人而异.有些人刚碰到压力便放弃了:有些人出卖和背叛了自己的意识:有些人不知不觉地慢慢熄火了,却从不知道自己何时已经失去了这种意识.然后,长者们蜂拥而上,百折

UILabel的相关属性设置

在iOS编程中UILabel是一个常用的控件,下面分享一下UILabel的相关属性设置的方法. 很多学习iOS6编程都是从storyboard开始,用到UILabel时是将控件拖到storyboard中生成实现,如果想要在-(void)viewDidLoad中用代码如[_label initWithFrame:CGRectMake(X,Y,WIDTH,HEIGHT)]方法改变拖拽到storyboard的label的大小是行不通的,因为程序加载时先执行了-(void)viewDidLoad的代码,