大家都是知道使用宏不仅方便,而且可以提高开发效率。下面总结了ios开发过程中的一些常用宏,会持续的往里面添加。
objective-c
//字符串是否为空#define kstringisempty(str) ([str iskindofclass:[nsnull class]] || str == nil || [str length] < 1 ? yes : no )//数组是否为空#define karrayisempty(array) (array == nil || [array iskindofclass:[nsnull class]] || array.count == 0)//字典是否为空#define kdictisempty(dic) (dic == nil || [dic iskindofclass:[nsnull class]] || dic.allkeys == 0)//是否是空对象#define kobjectisempty(_object) (_object == nil \|| [_object iskindofclass:[nsnull class]] \|| ([_object respondstoselector:@selector(length)] && [(nsdata *)_object length] == 0) \|| ([_object respondstoselector:@selector(count)] && [(nsarray *)_object count] == 0)) //获取屏幕宽度与高度#define kscreenwidth \([[uiscreen mainscreen] respondstoselector:@selector(nativebounds)] ? [uiscreen mainscreen].nativebounds.size.width/[uiscreen mainscreen].nativescale : [uiscreen mainscreen].bounds.size.width)#define kscreenheight \([[uiscreen mainscreen] respondstoselector:@selector(nativebounds)] ? [uiscreen mainscreen].nativebounds.size.height/[uiscreen mainscreen].nativescale : [uiscreen mainscreen].bounds.size.height)#define kscreensize \([[uiscreen mainscreen] respondstoselector:@selector(nativebounds)] ? cgsizemake([uiscreen mainscreen].nativebounds.size.width/[uiscreen mainscreen].nativescale,[uiscreen mainscreen].nativebounds.size.height/[uiscreen mainscreen].nativescale) : [uiscreen mainscreen].bounds.size) //一些缩写#define kapplication [uiapplication sharedapplication]#define kkeywindow [uiapplication sharedapplication].keywindow#define kappdelegate [uiapplication sharedapplication].delegate#define kuserdefaults [nsuserdefaults standarduserdefaults]#define knotificationcenter [nsnotificationcenter defaultcenter] //app版本号#define kappversion [[[nsbundle mainbundle] infodictionary] objectforkey:@"cfbundleshortversionstring"]//系统版本号#define ksystemversion [[uidevice currentdevice] systemversion]//获取当前语言#define kcurrentlanguage ([[nslocale preferredlanguages] objectatindex:0])//判断是否为iphone#define kisiphone (ui_user_interface_idiom() == uiuserinterfaceidiomphone)//判断是否为ipad#define kisipad (ui_user_interface_idiom() == uiuserinterfaceidiompad) //获取沙盒document路径#define kdocumentpath [nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes) firstobject]//获取沙盒temp路径#define ktemppath nstemporarydirectory()//获取沙盒cache路径#define kcachepath [nssearchpathfordirectoriesindomains(nscachesdirectory, nsuserdomainmask, yes) firstobject] //判断是真机还是模拟器#if target_os_iphone//真机#endif #if target_iphone_simulator//模拟器#endif //开发的时候打印,但是发布的时候不打印的nslog#ifdef debug#define nslog(...) nslog(@"%s 第%d行 \n %@\n\n",__func__,__line__,[nsstring stringwithformat:__va_args__])#else#define nslog(...)#endif //颜色#define krgbcolor(r, g, b) [uicolor colorwithred:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0]#define krgbacolor(r, g, b, a) [uicolor colorwithred:(r)/255.0 green:(r)/255.0 blue:(r)/255.0 alpha:a]#define krandomcolor krgbcolor(arc4random_uniform(256)/255.0,arc4random_uniform(256)/255.0,arc4random_uniform(256)/255.0) #define kcolorwithhex(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] //弱引用/强引用#define kweakself(type) __weak typeof(type) weak##type = type;#define kstrongself(type) __strong typeof(type) type = weak##type; //由角度转换弧度#define kdegreestoradian(x) (m_pi * (x) / 180.0)//由弧度转换角度#define kradiantodegrees(radian) (radian * 180.0) / (m_pi) //获取一段时间间隔#define kstarttime cfabsolutetime start = cfabsolutetimegetcurrent();#define kendtime nslog(@"time: %f", cfabsolutetimegetcurrent() - start)
1.定义尺寸类的宏
dimensmacros.h//状态栏高度#define status_bar_height 20//navbar高度#define navigation_bar_height 44//状态栏 + 导航栏 高度#define status_and_navigation_height ((status_bar_height) + (navigation_bar_height)) //屏幕 rect#define screen_rect ([uiscreen mainscreen].bounds) #define screen_width ([uiscreen mainscreen].bounds.size.width) #define screen_height ([uiscreen mainscreen].bounds.size.height) #define content_height (screen_height - navigation_bar_height - status_bar_height) //屏幕分辨率#define screen_resolution (screen_width * screen_height * ([uiscreen mainscreen].scale)) //广告栏高度#define banner_height 215 #define stylepage_height 21 #define smalltv_height 77 #define smalltv_width 110 #define follow_height 220 #define subchannel_height 62
2.定义沙盒目录文件的宏
pathmacros.h//文件目录#define kpathtemp nstemporarydirectory()#define kpathdocument [nssearchpathfordirectoriesindomains(nsdocumentdirectory, nsuserdomainmask, yes) objectatindex:0]#define kpathcache [nssearchpathfordirectoriesindomains(nscachesdirectory, nsuserdomainmask, yes) objectatindex:0]#define kpathsearch [kpathdocument stringbyappendingpathcomponent:@"search.plist"] #define kpathmagazine [kpathdocument stringbyappendingpathcomponent:@"magazine"]#define kpathdownloadedmgzs [kpathmagazine stringbyappendingpathcomponent:@"downloadedmgz.plist"]#define kpathdownloadurls [kpathmagazine stringbyappendingpathcomponent:@"downloadurls.plist"]#define kpathoperation [kpathmagazine stringbyappendingpathcomponent:@"operation.plist"] #define kpathsplashscreen [kpathcache stringbyappendingpathcomponent:@"splashscreen"]
3.工具类的宏
utilsmacros.h//log utils marco #define alog(fmt, ...) nslog((@"%s [line %d] " fmt), __pretty_function__, __line__, ##__va_args__); #ifdef debug#define dlog(fmt, ...) nslog((@"%s [line %d] " fmt), __pretty_function__, __line__, ##__va_args__);#else#define dlog(...)#endif #ifdef debug#define ulog(...)//#define ulog(fmt, ...) { uialertview *alert = [[uialertview alloc] initwithtitle:[nsstring stringwithformat:@"%s\n [line %d] ", __pretty_function__, __line__] message:[nsstring stringwithformat:fmt, ##__va_args__] delegate:nil cancelbuttontitle:@"ok" otherbuttontitles:nil]; [alert show]; }#else#define ulog(...)#endif //system version utils #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) // 获取rgb颜色#define rgba(r,g,b,a) [uicolor colorwithred:r/255.0f green:g/255.0f blue:b/255.0f alpha:a]#define rgb(r,g,b) rgba(r,g,b,1.0f) #define isportrait ([uiapplication sharedapplication].statusbarorientation == uiinterfaceorientationportrait || [uiapplication sharedapplication].statusbarorientation == uiinterfaceorientationportraitupsidedown) #define isnilornull(_ref) (((_ref) == nil) || ([(_ref) isequal:[nsnull null]])) //角度转弧度#define degrees_to_radians(d) (d * m_pi / 180) //大于等于7.0的ios版本#define ios7_or_later system_version_greater_than_or_equal_to(@"7.0") //大于等于8.0的ios版本#define ios8_or_later system_version_greater_than_or_equal_to(@"8.0") //ios6时,导航vc中view的起始高度#define yh_height (ios7_or_later ? 64:0) //获取系统时间戳#define getcurenttime [nsstring stringwithformat:@"%ld", (long)[[nsdate date] timeintervalsince1970]]
4.通知notification相关的宏
notificationmacros.h//系统notification定义 #define tncancelfavoriteproductnotification @"tncancelfavoriteproductnotification" //取消收藏时#define tnmarkfavoriteproductnotification @"tnmarkfavoriteproductnotification" //标记收藏时 #define knotficationdownloadprogresschanged @"knotficationdownloadprogresschanged" //下载进度变化#define knotificationpausedownload @"knotificationpausedownload" //暂停下载#define knotificationstartdownload @"knotificationstartdownload" //开始下载 #define knotificationdownloadsuccess @"knotificationdownloadsuccess" //下载成功#define knotificationdownloadfailed @"knotificationdownloadfailed" //下载失败#define knotificationdownloadnewmagazine @"knotificationdownloadnewmagazine"服务端api接口的宏 apistringmacros.h////////////////////////////////////////////////////////////////////////////////////////////////////接口名称相关 #ifdef debug//debug状态下的测试api#define api_base_url_string @"http://boys.test.companydomain.com/api/" #else//release状态下的线上api#define api_base_url_string @"http://www.companydomain.com/api/" #endif //接口#define get_content_detail @"channel/getcontentdetail" //获取内容详情(含上一个和下一个) #define get_comment_list @"comment/getcommentlist" //获取评论列表 #define comment_login @"comment/login" //获取评论列表 #define comment_publish @"comment/publish" //发布评论 #define comment_delete @"comment/delcomment" //删除评论 #define loginout @"common/logout" //登出还有很多其他类型的宏,此处不一一列举 创建一个import所有宏相关的文件macros.h macros.h#import "utilsmacros.h"#import "apistringmacros.h"#import "dimensmacros.h"#import "notificationmacros.h"#import "shareplatformmacros.h"#import "stringmacros.h"#import "userbehaviormacros.h"#import "pathmacros.h"在xcode项目的pch文件中,导入macros.h文件 xcodeprojectname-prefix.pch#ifdef __objc__ #import <uikit/uikit.h> #import <foundation/foundation.h> #import "macros.h"#endif
更多资讯:公众号 iOS进阶宝典