简介:

在IOS9.2官方文档中Attributes的描述如下,简单明了:

Attributes provide more information about a declaration or type. There are two kinds of attributes in Swift, those that apply to declarations and those that apply to types.

简单来说,就是使用这种规则来对一些方法声明或者类型声明进行一个功能性描述,并且添加了一些奇特的描述,下面具体实例来看看一些有趣实用的功能。

其实,OC已经为我们将attributes封装成了一个个的很简单的宏,下面的讲解一般分为封装后和封装前的使用方法。

语法

语法如下:

__attribute__((关键字))
或者
__attribute__((关键字(参数列表)))

功能

功能1:方法的启用与废弃提醒

/*        提示在1.0开始使用 在iOS7.0后弃用 提示信息         */
+ (void)test:(NSString *)test NS_DEPRECATED_IOS(1_0, 7_0, "iOS 1.0后启用该方法,IOS7.0后弃用") ;
+ (void)fontFormat:(NSString *)iii __attribute__((availability(ios,introduced=2_0,deprecated=7_0,message="ede")));

NS_DEPRECATED_IOS(1_0, 7_0, "iOS 1.0后启用该方法,IOS7.0后弃用")这个就是OC为我们封装好的宏,第一个参数表示启用的版本号,第二个参数表示废弃的版本号,第三个参数表示当版本好处于废弃的版本号或者之后的警告信息。

__ attribute __((availability(ios,introduced=2_0,deprecated=7_0,message="ede")))该方法就是未封装前的使用方法,参数中第一个参数表示支持的系统平台,可以使用*通配符表示全部系统。


格式化字符串的检查

/*        表示的第一个参数是个格式化字符串 从第二个参数开始检查         */
+ (instancetype)stringWithFormat:(NSString *)format,... NS_FORMAT_FUNCTION(1, 2); + (instancetype)stringWithFormat:(NSString *)format second:(char *)format2,... __attribute__((format(printf,2,3)));

同理,第一个NS_FORMAT_FUNCTION是OC封装好的宏,第二个为原生的,但是注意,原生的使用时只能格式化检查char类型字符串,因此,如果想使用该功能,建议使用OC封装好的宏。


指定函数无返回类型

// 指定该函数 永远不会有返回
+ (NSArray *) __attribute__((noreturn)) noneReturnTest;

该指定可以用于定义一些可能中途中断方法,而导致的无返回值的情况。


警告返回值未使用

//表示警告返回值未使用
+ (BOOL)testUnUse __attribute__((warn_unused_result()));

该指定表示返回值较为重要,如果没有使用,可能会造成一些不必要的bug,因此来提醒开发者是否忘记了使用返回值。


在main函数之前或之后调用方法

__attribute__((constructor)) void before_main(){
printf("before main\n");
}
__attribute__((constructor))void agter_main(){
printf("after main\n");
}

该属性可以声明一个在main方法之前或之后调用的方法,可以用来监控main函数的行为。

OC中的__attribute__的使用的更多相关文章

  1. OC中加载html5调用html方法和修改HTML5内容

    1.利用webView控件加载本地html5或者网络上html5 2.设置控制器为webView的代理,遵守协议 3.实现代理方法webViewDidFinishLoad: 4.在代理方法中进行操作H ...

  2. java中的继承与oc中的继承的区别

    为什么要使用继承? 继承的好处: (1)抽取出了重复的代码,使代码更加灵活 (2)建立了类和类之间的联系 继承的缺点: 耦合性太强 OC中的继承 1.OC中不允许子类和父类拥有相同名称的成员变量名:( ...

  3. Swift: 比较Swift中闭包传值、OC中的Block传值

    一.介绍 开发者对匿名函数应该很清楚,其实它就是一个没有名字的函数或者方法,给人直观的感觉就是只能看到参数和返回值.在iOS开发中中,它又有自己的称呼,在OC中叫Block代码块,在Swift中叫闭包 ...

  4. OC中类别、扩展、协议与委托

    一.类别(category) 类别(category)——通过使用类别,我们可以动态地为现有的类添加新方法,而且可以将类定义模块化地分不到多个相关文件中.通常只在类别中定义方法.(类别,接口部分的定义 ...

  5. OC中的私有变量和description

    .OC中的私有变量 在类的实现即.m @implementation中也可以声明成员变量,但是因为在其他文件中通常都只 是包含头文件而不会包含实现文件,所以在.m文件中声明的成员变量是@private ...

  6. Oc中的数组

    ========================== 数组 ========================== 一.认识数组 oc中可以把NSObject对象的子类放到数组这个集合中,但是int.f ...

  7. OC中面向对象2

    一. 定义OC的类和创建OC的对象 接下来就在OC中模拟现实生活中的情况,创建一辆车出来.首先要有一个车子类,然后再利用车子类创建车子对象 要描述OC中的类稍微麻烦一点,分2大步骤:类的声明.类的实现 ...

  8. OC中的面向对象语法

    一. 面向对象和面向过程思想 OC是面向对象的,C是面向过程的.面向对象和面向过程只是解决问题的两种不同思想 1. 面向对象和面向过程的区别 1) 以用电脑听歌为例子 a) 面向过程 打开电脑 播放电 ...

  9. OC中的指针

    NSError *err = nil; NSError __strong **error = &err; //因为在oc中,通过* *err 创建的指针是用__strong修改的,所以要一致, ...

随机推荐

  1. BZOJ 2006: [NOI2010]超级钢琴

    2006: [NOI2010]超级钢琴 Time Limit: 20 Sec  Memory Limit: 552 MBSubmit: 2613  Solved: 1297[Submit][Statu ...

  2. py-faster-rcnn几个辅助脚本

    py-faster-rcnn本身代码很棒. 不过使用它的时候,还是需要自己写一些脚本,作为辅助. 1 所有.py文件顶部添加utf8编码声明.因为有时候需要添加中文注释,不声明编码会报错 #inser ...

  3. 架构师养成记--10.master-worker模式

    master-worker模式是一种并行计算模式,分为master进程和worker进程两个部分,master是担任总管角色,worker才是执行具体任务的地方. 总体流程应该是这样的: 具体一点,代 ...

  4. AnjularJS系列6 —— 过滤器

    第六篇,过滤器 AngularJS 过滤器可用于转换数据: 过滤器 描述 currency 格式化数字为货币格式. filter 从数组项中选择一个子集. lowercase 格式化字符串为小写. o ...

  5. arch+xfce4系统配置

    音量控制快捷键插件: sudo pacman -S xfce4-volumed

  6. ios 生成问题

    上午的时候遇到ios打包的时候出现问题,生成没有问题,但是安装到手机的时候出现问题,错误如下 The certificate used to sign "AppName" has ...

  7. W3Help-兼容性-知识库

    http://www.w3help.org/zh-cn/kb/ clear:none/left/right/both/inherit该特性表明元素框的哪一边不可以和先前的浮动框相邻.'clear' 特 ...

  8. windows系统如何添加ssh key到github

    我自己的电脑安装了git后,从来没有用过,今天偶然用了一次,发现不能pull到东西,报错说我没有权限,于是我网上搜索了一下,应该是我没有配置ssh key的原因,相信很多人都有和我一样的经历吧,这里呢 ...

  9. 浅谈Android样式开发之布局优化

    引言 今天我们来谈一下Android中布局优化常用的一些手段.官方给出了3种优化方案,分别是</include>.</viewstub>.</merge>标签,下面 ...

  10. mysql-开启慢查询&所有操作记录日志

    在运营网站的过程中,可能会遇到网站突然变慢的问题,一般情况下和 MySQL 慢有关系,可以通过开启慢查询,找到影响效率的 SQL ,然后采取相应的措施.下面介绍一下如何开启慢查询: 1.开启慢查询 找 ...