当前位置: 移动技术网 > 移动技术>移动开发>IOS > iOS中常用的宏定义总结

iOS中常用的宏定义总结

2019年07月23日  | 移动技术网移动技术  | 我要评论

前言

宏定义在c系开发中可以说占有举足轻重的作用,为了简化开发流程,提升工作效率,收集了一些平时常用的宏定义,今后会不定期更新

1.ui元素

//navbar高度
#define navigationbar_height 44

//statusbar高度
#define statusbar_height 20

//获取屏幕 宽度、高度
#define screen_width ([uiscreen mainscreen].bounds.size.width)
#define screen_height ([uiscreen mainscreen].bounds.size.height)

//内容视图高度
#define content_height (screen_height - navigationbar_height - statusbar_height)

//kwindow
#define kwindow [uiapplication sharedapplication].keywindow

//屏幕分辨率
#define screen_resolution (screen_width * screen_height * ([uiscreen mainscreen].scale))

//状态栏 + 导航栏 高度
#define status_and_navigation_height ((statusbar_height) + (navigationbar_height))

2.log

//(在系统log基础之上,加入自定义的相关信息)
#define nslog(format, ...) do {            \
fprintf(stderr, "<%s : %d> %s\n",           \
[[[nsstring stringwithutf8string:__file__] lastpathcomponent] utf8string], \
__line__, __func__);              \
(nslog)((format), ##__va_args__);           \
fprintf(stderr, "-------\n");            \
} while (0)

3.系统

//获取当前系统版本
#define ios_version [[[uidevice currentdevice] systemversion] floatvalue]
#define currentsystemversion [[uidevice currentdevice] systemversion]

//获取当前系统语言
#define currentlanguage ([[nslocale preferredlanguages] objectatindex:0])

//判断是不是真机
#if target_os_iphone
 //iphone device
#endif

//判断是不是模拟器
#if target_iphone_simulator
 //iphone simulator
#endif

//是否在arc环境下
#if __has_feature(objc_arc)
 //compiling with arc
#else
 //compiling without arc
#endif

//判断是否为iphone
#define is_iphone (ui_user_interface_idiom() == uiuserinterfaceidiomphone)

//判断是否为ipad
#define is_ipad (ui_user_interface_idiom() == uiuserinterfaceidiompad)

//判断是否为ipod
#define is_ipod ([[[uidevice currentdevice] model] isequaltostring:@"ipod touch"])

//判断是否为iphone 5(s)(e)
#define iphone5se [[uiscreen mainscreen] bounds].size.width == 320.0f &&[[uiscreen mainscreen] bounds].size.height == 568.0f

//判断是否为iphone 6/6s
#define iphone6_6s [[uiscreen mainscreen] bounds].size.width == 375.0f &&[[uiscreen mainscreen] bounds].size.height == 667.0f

//判断是否为iphone 6plus/6splus
#define iphone6plus_6splus [[uiscreen mainscreen] bounds].size.width == 414.0f && [[uiscreen mainscreen] bounds].size.height == 736.0f

//判断 ios 或更高的系统版本
#define ios_version_6_or_later (([[[uidevice currentdevice] systemversion] floatvalue]>=6.0)? (yes):(no))
#define ios_version_7_or_later (([[[uidevice currentdevice] systemversion] floatvalue]>=7.0)? (yes):(no))
#define ios_version_8_or_later (([[[uidevice currentdevice] systemversion] floatvalue]>=8.0)? (yes):(no))
#define ios_version_9_or_later (([[[uidevice currentdevice] systemversion] floatvalue]>=9.0)? (yes):(no))
#define ios_version_10_or_later (([[[uidevice currentdevice] systemversion] floatvalue]>=10.0)? (yes):(no))

//系统版本工具
#define system_version_equal_to(v)     ([[[uidevice currentdevice] systemversion] compare:v options:nsnumericsearch] == nsorderedsame)
#define system_version_greater_than(v)    ([[[uidevice currentdevice] systemversion] compare:v options:nsnumericsearch] == nsordereddescending)
#define system_version_greater_than_or_equal_to(v) ([[[uidevice currentdevice] systemversion] compare:v options:nsnumericsearch] != nsorderedascending)
#define system_version_less_than(v)     ([[[uidevice currentdevice] systemversion] compare:v options:nsnumericsearch] == nsorderedascending)
#define system_version_less_than_or_equal_to(v)  ([[[uidevice currentdevice] systemversion] compare:v options:nsnumericsearch] != nsordereddescending)

//检测是否是竖屏状态
#define isportrait ([uiapplication sharedapplication].statusbarorientation == uiinterfaceorientationportrait || [uiapplication sharedapplication].statusbarorientation == uiinterfaceorientationportraitupsidedown)

4.颜色类

//带有rgba的颜色设置
#define color(r, g, b, a) [uicolor colorwithred:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]

//设置随机颜色(调试时候很有用)
#define randomcolor [uicolor colorwithred:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0]

//16进制颜色
#define rgb16color(rgbvalue) [uicolor colorwithred:((float)((rgbvalue & 0xff0000) >> 16))/255.0 green:((float)((rgbvalue & 0xff00) >> 8))/255.0 blue:((float)(rgbvalue & 0xff))/255.0 alpha:1.0]

5.通知

//获取通知中心
#define notificationcenter [nsnotificationcenter defaultcenter]

//快速发通知
#define post_notify(_notificationname, _obj, _userinfodictionary) [[nsnotificationcenter defaultcenter] postnotificationname: _notificationname object: _obj userinfo: _userinfodictionary];

//添加观察者
#define add_observer(_notificationname, _observer, _observerselector, _obj) [[nsnotificationcenter defaultcenter] addobserver:_observer selector:@selector(_observerselector) name:_notificationname object: _obj];

//移除观察者
#define remove_observer(_observer) [[nsnotificationcenter defaultcenter] removeobserver: _observer];

6.数据存储

//nsuserdefaults 实例化
#define user_default [nsuserdefaults standarduserdefaults]

//获取temp
#define kpathtemp nstemporarydirectory()

//获取沙盒document
#define kpathdocument [nssearchpathfordirectoriesindomains(nsdocumentdirectory,nsuserdomainmask, yes) firstobject]

//获取沙盒cache
#define kpathcache [nssearchpathfordirectoriesindomains(nscachesdirectory,nsuserdomainmask, yes) firstobject]

7.单例模式

#define singleh(name) +(instancetype)share##name;

#if __has_feature(objc_arc)
//条件满足 arc
#define singlem(name) static id _instance;\
+(instancetype)allocwithzone:(struct _nszone *)zone\
{\
static dispatch_once_t oncetoken;\
dispatch_once(&oncetoken, ^{\
_instance = [super allocwithzone:zone];\
});\
\
return _instance;\
}\
\
+(instancetype)share##name\
{\
return [[self alloc]init];\
}\
\
-(id)copywithzone:(nszone *)zone\
{\
return _instance;\
}\
\
-(id)mutablecopywithzone:(nszone *)zone\
{\
return _instance;\
}

#else
//mrc
#define singlem(name) static id _instance;\
+(instancetype)allocwithzone:(struct _nszone *)zone\
{\
static dispatch_once_t oncetoken;\
dispatch_once(&oncetoken, ^{\
_instance = [super allocwithzone:zone];\
});\
\
return _instance;\
}\
\
+(instancetype)share##name\
{\
return [[self alloc]init];\
}\
\
-(id)copywithzone:(nszone *)zone\
{\
return _instance;\
}\
\
-(id)mutablecopywithzone:(nszone *)zone\
{\
return _instance;\
}\
-(oneway void)release\
{\
}\
\
-(instancetype)retain\
{\
 return _instance;\
}\
\
-(nsuinteger)retaincount\
{\
 return maxfloat;\
}
#endif

8.时间

//获取系统时间戳
#define curenttime [nsstring stringwithformat:@"%ld", (long)[[nsdate date] timeintervalsince1970]]

9.权限

//获取相机权限状态
#define camerastatus [avcapturedevice authorizationstatusformediatype:avmediatypevideo]
#define cameradenied ((camerastatus == avauthorizationstatusrestricted)||(camerastatus == avauthorizationstatusdenied))
#define cameraallowed (!cameradenyed)

/** 定位权限*/
#define locationstatus [cllocationmanager authorizationstatus];
#define locationallowed ([cllocationmanager locationservicesenabled] && !((status == kclauthorizationstatusdenied) || (status == kclauthorizationstatusrestricted)))
#define locationdenied (!locationallowed)

/** 消息推送权限*/
#define pushclose (([[uidevice currentdevice].systemversion floatvalue]>=8.0f)?(uiusernotificationtypenone == [[uiapplication sharedapplication] currentusernotificationsettings].types):(uiremotenotificationtypenone == [[uiapplication sharedapplication] enabledremotenotificationtypes]))
#define pushopen (!pushclose)

10.本地文件加载

#define loadimage(file,type) [uiimage imagewithcontentsoffile:[[nsbundle mainbundle]pathforresource:file oftype:type]]
#define loadarray(file,type) [nsarray arraywithcontentsoffile:[[nsbundle mainbundle]pathforresource:file oftype:type]]
#define loaddict(file,type) [nsdictionary dictionarywithcontentsoffile:[[nsbundle mainbundle]pathforresource:file oftype:type]]

11.block

//弱引用
#define weakwithnameandobject(obj,name) __weak typeof(obj) weak##name = obj
//强引用
#define strongwithnameandobject(obj,name) __strong typeof(obj) strong##name = obj

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对移动技术网的支持。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网