zoukankan      html  css  js  c++  java
  • OC中的__attribute__的使用

    简介:

    在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封装成了一个个的很简单的宏,下面的讲解一般分为封装后和封装前的使用方法。

    语法

    语法如下:

    1. __attribute__((关键字))
    2. 或者
    3. __attribute__((关键字(参数列表)))

    功能

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

    1. /* 提示在1.0开始使用 在iOS7.0后弃用 提示信息 */
    2. + (void)test:(NSString *)test NS_DEPRECATED_IOS(1_0, 7_0, "iOS 1.0后启用该方法,IOS7.0后弃用") ;
    3. + (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")))该方法就是未封装前的使用方法,参数中第一个参数表示支持的系统平台,可以使用通配符表示全部系统。
    **

    格式化字符串的检查

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

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

    指定函数无返回类型

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

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

    警告返回值未使用

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

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

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

    1. __attribute__((constructor)) void before_main(){
    2. printf("before main ");
    3. }
    4. __attribute__((constructor))void agter_main(){
    5. printf("after main ");
    6. }

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

    https://www.bbsmax.com/A/amd01AXzge/

  • 相关阅读:
    常见26个jquery使用技巧详解(比如禁止右键点击、隐藏文本框文字等)
    禁用页面及页面所有frame内的右键菜单
    JS模态窗口返回值兼容问题解决方案
    winform登录时,在密码框按下回车,直接登陆
    C#中实现邮件发送功能
    CTFHub-彩蛋(持续更新~)
    CTFHub技能树-目录遍历
    免密钥方式登陆配置
    Ansible_Day1
    Python_Day2_共享你的代码
  • 原文地址:https://www.cnblogs.com/feng9exe/p/10376396.html
Copyright © 2011-2022 走看看