关闭

常用的Objective-C特性检查

标签: objective-c对象
1159人阅读 评论(0) 收藏 举报
分类:
  • 检查是否支持blocks
 __has_extension(blocks)
  • 检查是否支持instancetye上下文关键词
__has_feature(objc_instancetype)
@interface A
+ (instancetype)constructAnA;
@end
  • 检查是否支持arc
__has_feature(objc_arc)
__has_feature(objc_arc_weak) //同时检查是否支持__weak指针
  • 检查是否支持固定基础类型的枚举
__has_feature(objc_fixed_enum)
typedef enum : unsigned char { Red, Green, Blue } Color;
  • 检查是否支持对象字面值
__has_feature(objc_array_literals)
__has_feature(objc_dictionary_literals)
NSArray *array = @[ @"Hello", NSApp, [NSNumber numberWithInt:42] ];
NSDictionary *dictionary = @{
    @"name" : NSUserName(),
    @"date" : [NSDate date],
    @"processInfo" : [NSProcessInfo processInfo]
};
  • 检查是否支持对象下标(OC的对象指针现在可以像C一样做下标操作)
__has_feature(objc_subscripting)
NSMutableArray *array = ...;
NSUInteger idx = ...;
id newObject = ...;
id oldObject = array[idx];
array[idx] = newObject;         // replace oldObject with newObject

NSMutableDictionary *dictionary = ...;
NSString *key = ...;
oldObject = dictionary[key];
dictionary[key] = newObject;    // replace oldObject with newObject
  • 检查是否支持属性的自动合成(不使用@dynamic的情况下,自动生成存取方法)
__has_feature(objc_default_synthesize_properties)


使用范例(来源:MBProgressHUD源码):
#ifndef MB_INSTANCETYPE
#if __has_feature(objc_instancetype)
	#define MB_INSTANCETYPE instancetype
#else
	#define MB_INSTANCETYPE id
#endif
#endif


#ifndef MB_STRONG
#if __has_feature(objc_arc)
	#define MB_STRONG strong
#else
	#define MB_STRONG retain
#endif
#endif


#ifndef MB_WEAK
#if __has_feature(objc_arc_weak)
	#define MB_WEAK weak
#elif __has_feature(objc_arc)
	#define MB_WEAK unsafe_unretained
#else
	#define MB_WEAK assign
#endif
#endif


#if NS_BLOCKS_AVAILABLE
typedef void (^MBProgressHUDCompletionBlock)();
#endif




0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:4904次
    • 积分:114
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:1篇
    • 译文:1篇
    • 评论:0条
    文章分类
    文章存档