[轉(zhuǎn)]iOS宏定義的使用與規(guī)范

轉(zhuǎn)載自:這里

#######宏定義在很多方面都會使用,例如定義高度蚁飒、判斷iOS系統(tǒng)、工具類萝喘,還有諸如文件路徑淮逻、服務端api接口文檔。為了對宏能夠快速定位和了解其功能阁簸,我們最好在定義的時候?qū)⑵浞湃胩囟ǖ念^文件中爬早,下面我拋磚引玉,對一些常用的宏進行分類启妹、分文件定義筛严,希望對大家有所幫助。

1.定義尺寸類的宏

DimensMacros.h
//狀態(tài)欄高度
#define STATUS_BAR_HEIGHT 20
//NavBar高度
#define NAVIGATION_BAR_HEIGHT 44
//狀態(tài)欄 + 導航欄 高度
#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"]
#endif

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

4. 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)

5. 獲取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]]))

//角度轉(zhuǎn)弧度

#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)

//獲取系統(tǒng)時間戳

#define getCurentTime [NSString stringWithFormat:@"%ld", (long)[[NSDate date] timeIntervalSince1970]]

通知Notification相關的宏

NotificationMacros.h
//系統(tǒng)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狀態(tài)下的測試API
#define API_BASE_URL_STRING @"http://boys.test.companydomain.com/api/"
#else
//Release狀態(tài)下的線上API
#define API_BASE_URL_STRING @"http://www.companydomain.com/api/"
#endif
//接口
#define GET_CONTENT_DETAIL @"channel/getContentDetail" //獲取內(nèi)容詳情(含上一個和下一個)
#define GET_COMMENT_LIST @"comment/getCommentList" //獲取評論列表
#define COMMENT_LOGIN @"comment/login" //獲取評論列表
#define COMMENT_PUBLISH @"comment/publish" //發(fā)布評論
#define COMMENT_DELETE @"comment/delComment" //刪除評論
#define LOGINOUT @"common/logout" //登出
還有很多其他類型的宏桨啃,此處不一一列舉

創(chuàng)建一個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
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末檬输,一起剝皮案震驚了整個濱河市照瘾,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌丧慈,老刑警劉巖析命,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異逃默,居然都是意外死亡鹃愤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進店門完域,熙熙樓的掌柜王于貴愁眉苦臉地迎上來软吐,“玉大人,你說我怎么就攤上這事吟税“及遥” “怎么了鸟蟹?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長使兔。 經(jīng)常有香客問我,道長藤韵,這世上最難降的妖魔是什么虐沥? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮泽艘,結果婚禮上欲险,老公的妹妹穿的比我還像新娘。我一直安慰自己匹涮,他們只是感情好天试,可當我...
    茶點故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著然低,像睡著了一般喜每。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上雳攘,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天带兜,我揣著相機與錄音,去河邊找鬼吨灭。 笑死刚照,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的喧兄。 我是一名探鬼主播无畔,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼吠冤!你這毒婦竟也來了浑彰?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤咨演,失蹤者是張志新(化名)和其女友劉穎闸昨,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體薄风,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡饵较,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了遭赂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片循诉。...
    茶點故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖撇他,靈堂內(nèi)的尸體忽然破棺而出茄猫,到底是詐尸還是另有隱情狈蚤,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布划纽,位于F島的核電站脆侮,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏勇劣。R本人自食惡果不足惜靖避,卻給世界環(huán)境...
    茶點故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望比默。 院中可真熱鬧幻捏,春花似錦、人聲如沸命咐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽醋奠。三九已至榛臼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間窜司,已是汗流浹背讽坏。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留例证,地道東北人路呜。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像织咧,于是被迫代替她去往敵國和親胀葱。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,577評論 2 353

推薦閱讀更多精彩內(nèi)容

  • iOS開發(fā)過程中笙蒙,使用的一些常用宏定義 字符串是否為空#define kStringIsEmpty(str) ([...
    goyohol閱讀 5,350評論 30 85
  • 『導言』 iOS 開發(fā)常用宏總結的相關資料,需要的朋友可以參考下。文章中有不足之處請指正艇搀!謝謝尿扯! OC對象判斷是否...
    隨心吧閱讀 858評論 0 16
  • /**獲取屏幕寬度與高度 導航,tabbar高度*/ #define SCREEN_WIDTH [UIScree...
    MUYO_echo閱讀 685評論 0 3
  • 前日焰雕,見一商場門前圍一群人衷笋。近觀之,果如所料矩屁,幾無賴設一賭局辟宗。一人坐地爵赵,前面放一碗,瓜子兒撒之泊脐,問碗內(nèi)有幾...
    文心聞意閱讀 238評論 0 0
  • 2017年2月25日 拿到歐拉的offer空幻,林志深吸一口氣,不易察覺的癟了癟嘴容客。雖然薪資是上一家公司的八分之一氛悬,但...
    InnerBoom閱讀 606評論 0 0