ios——备忘__attribute__总结(一)

1、__attribute__一般用来设置函数属性、变量属性、类型属性等
格式:__attribute__(xxx)    xxx:即参数
官方例子:NSLog
#define NS_FORMAT_FUNCTION(F,A) __attribute__((format(__NSString__, F, A)))
format属性可以给被声明的函数加上类似printf或者scanf的特征,它可以使编译器检查函数声明和函数实际调用参数之间的格式化字符串是否匹配。
对于format参数的使用如下
format (archetype, string-index, first-to-check)
archetype指定哪种风格,这里是__NSString__
string-index指定传入的第几个参数是格式化字符串
first-to-check指定第一个可变参数所在的索引
2、availability属性
availability属性是一个以逗号为分隔的参数列表,以平台的名称开始,包含一些放在附加信息里的一些里程碑式的声明。
可以设置废弃的方法,简单例子:
- (void)oldMethod:(NSString *)string __attribute__((availability(ios,introduced=2_0,deprecated=7_0,message="用 -newMethod: 这个方法替代 "))){
    NSLog(@"我是旧方法,不要调我");
}


- (void)newMethod:(NSString *)string{
    NSLog(@"我是新方法");
}
//注:如果经常用,建议定义成类似系统的宏
#define MX_DEPRECATED_IOS(_iosIntro,_iosDep,...)  __attribute__((availability(ios,introduced=_iosIntro,deprecated=_iosDep,message=""__VA_ARGS__)))
上面的例子就变成这样:
- (void)oldMethod:(NSString *)string  MX_DEPRECATED_IOS(2_0,7_0,"用 -newMethod: 这个方法替代 "){
NSLog(@"我是旧方法,不要调我");
}


- (void)newMethod:(NSString *)string{
    NSLog(@"我是新方法");
}
3、unavailable属性
告诉编译器该方法不可用,如果强行调用编译器会提示错误。
例子:
#define UNAVAILABLE_ATTRIBUTE __attribute__((unavailable))
#define NS_UNAVAILABLE UNAVAILABLE_ATTRIBUTE
4、NSObject属性
例子:
@property (nonatomic,strong) __attribute__((NSObject)) CFDictionaryRef myDictionary;
CFDictionaryRef属于CoreFoundation框架的,也就是非OC对象,加上attribute((NSObject))后,myDictionary的内存管理会被当做OC对象来对待.
另外一个例子:
typedef __attribute__((NSObject)) CGGradientRef GradientObject;
@property (nonatomic, strong) GradientObject storedGradient;
CGGradientRef属于Core Graphics框架,非OC对象,首先将CGGradientRef起别名为GradientObject,并使其内存管理会被当做OC对象来对待.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值