iOS開發(fā)常用宏定義

世上最無奈之事鸣峭,即便刀劍在手前普,或者天下無敵肚邢,仍是有救不了最想要救的人;

——清香白蓮.素還真

做開發(fā)不久拭卿,經(jīng)常會(huì)上網(wǎng)找一些資料骡湖,簡書上的內(nèi)容是看著比較順眼的了;特此也想把平時(shí)工作中遇到的問題總結(jié)記錄下來峻厚,希望自己可以養(yǎng)成一個(gè)好習(xí)慣响蕴!
就從常用的宏定義開始吧!

1.屏幕寬高

#define kScreenWidth [UIScreen mainScreen].bounds.size.width
#define kScreenHeight  [UIScreen mainScreen].bounds.size.height

2.手機(jī)型號

#define kISiPhone (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
#define kScreenMaxLength (MAX(kScreenWidth, kScreenHeight))
#define kScreenMinLength (MIN(kScreenWidth, kScreenHeight))
#define kISiPhone5 (kISiPhone && kScreenMaxLength == 568.0)
#define kISiPhone6 (kISiPhone && kScreenMaxLength == 667.0)
#define kISiPhone6P (kISiPhone && kScreenMaxLength == 736.0)
#define kISiPhoneX (kISiPhone && kScreenMaxLength == 812.0)
#define kISiPhoneXr (kISiPhone && kScreenMaxLength == 896.0)
#define kISiPhoneXX (kISiPhone && kScreenMaxLength > 811.0)
#define IOS8 ([[[UIDevice currentDevice] systemVersion] doubleValue] >= 8.0)

3.適配相關(guān)

//6為標(biāo)準(zhǔn)適配的,如果需要其他標(biāo)準(zhǔn)可以修改
#define kScale_W(w) ((kScreenWidth)/375) * (w)
#define kScale_H(h) (kScreenHeight/667) * (h)
//字體適配
#define kScaleFont(fontSize) [UIFont systemFontOfSize: fontSize*kScreenWidth/375]
//狀態(tài)欄高度
#define kStatusBarHeight [[UIApplication sharedApplication] statusBarFrame].size.height
//狀態(tài)欄高度
#define StatusBarHeight (kISiPhoneXX?44:20)
//標(biāo)簽欄高度
#define kTabBarHeight (StatusBarHeight > 20 ? 83 : 49)
//導(dǎo)航欄高度
#define kNavBarHeight (StatusBarHeight + 44)
//安全區(qū)高度
#define kSafeAreaBottom (kISiPhoneXX ? 34 : 0)

3.字體樣式

#define kBoldFont(x) [UIFont boldSystemFontOfSize:x]
#define kFont(x) [UIFont systemFontOfSize:x]
#define kNameFont(x) [UIFont fontWithName:@"Heiti SC" size:x]

4.顏色設(shè)置

//RGB格式
#define kRGB(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0]
//RGBA格式
#define kRGBA(r, g, b, a) [UIColor colorWithRed:r/255.0 green:g/255.0 blue:b/255.0 alpha:a]
//隨機(jī)顏色
#define kRandomColor [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0]

5.系統(tǒng)對象

//APP對象 (單例對象)
#define kApplication [UIApplication sharedApplication]
//主窗口 (keyWindow)
#define kKeyWindow [UIApplication sharedApplication].keyWindow
//NSUserDefaults實(shí)例化
#define kUserDefaults [NSUserDefaults standardUserDefaults]
//通知中心 (單例對象)
#define kNotificationCenter [NSNotificationCenter defaultCenter]
//發(fā)送通知
#define KPostNotification(name,obj,info) [[NSNotificationCenter defaultCenter]postNotificationName:name object:obj userInfo:info]
//APP版本號
#define kVersion [[[NSBundle mainBundle] infoDictionary] valueForKey:@"CFBundleShortVersionString"]
//系統(tǒng)版本號
#define kSystemVersion [[UIDevice currentDevice] systemVersion]

6.簡單調(diào)用

//加載圖片
#define kGetImage(imageName) [UIImage imageNamed:[NSString stringWithFormat:@"%@",imageName]]
//弱引用
#define kWeakSelf(type)  __weak typeof(type) weak##type = type
//強(qiáng)引用
#define kStrongSelf(type)  __strong typeof(type) type = weak##type
//安全調(diào)用Block
#define kSafeBlock(blockName,...) ({!blockName ? nil : blockName(__VA_ARGS__);})
//加載xib
#define kLoadNib(nibName) [UINib nibWithNibName:nibName bundle:[NSBundle mainBundle]]
//字符串拼接
#define kStringFormat(format,...) [NSString stringWithFormat:format,##__VA_ARGS__]
//屬性快速聲明(建議使用代碼塊)
#define kPropertyString(name) @property(nonatomic,copy)NSString *name
#define kPropertyStrong(type,name) @property(nonatomic,strong)type *name
#define kPropertyAssign(name) @property(nonatomic,assign)NSInteger name
// View 圓角和加邊框
#define kViewBorderRadius(View, Radius, Width, Color)\
\
[View.layer setCornerRadius:(Radius)];\
[View.layer setMasksToBounds:YES];\
[View.layer setBorderWidth:(Width)];\
[View.layer setBorderColor:[Color CGColor]]
// View 圓角
#define kViewRadius(View, Radius)\
\
[View.layer setCornerRadius:(Radius)];\
[View.layer setMasksToBounds:YES]
//永久存儲(chǔ)對象
#define kSetUserDefaults(object, key)                                                                                                 \
({                                                                                                                                             \
NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults];                                                                         \
[defaults setObject:object forKey:key];                                                                                                    \
[defaults synchronize];                                                                                                                    \
})
//獲取對象
#define kGetUserDefaults(key) [[NSUserDefaults standardUserDefaults] objectForKey:key]
//刪除某一個(gè)對象
#define kRemoveUserDefaults(key)                                         \
({                                                                          \
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];       \
[defaults removeObjectForKey:_key];                                     \
[defaults synchronize];                                                 \
})
//清除 NSUserDefaults 保存的所有數(shù)據(jù)
#define kRemoveAllUserDefaults  [[NSUserDefaults standardUserDefaults] removePersistentDomainForName:[[NSBundle mainBundle] bundleIdentifier]]

7. 獲取時(shí)間

//獲得當(dāng)前的年份
#define  kCurrentYear [[NSCalendar currentCalendar] component:NSCalendarUnitYear fromDate:[NSDate date]]
//獲得當(dāng)前的月份
#define  kCurrentMonth [[NSCalendar currentCalendar] component:NSCalendarUnitMonth fromDate:[NSDate date]]
//獲得當(dāng)前的日期
#define  kCurrentDay  [[NSCalendar currentCalendar] component:NSCalendarUnitDay fromDate:[NSDate date]]
//獲得當(dāng)前的小時(shí)
#define  kCurrentHour [[NSCalendar currentCalendar] component:NSCalendarUnitHour fromDate:[NSDate date]]
//獲得當(dāng)前的分
#define  kCurrentMin [[NSCalendar currentCalendar] component:NSCalendarUnitMinute fromDate:[NSDate date]]
//獲得當(dāng)前的秒
#define  kCurrentSec [[NSCalendar currentCalendar] component:NSCalendarUnitSecond fromDate:[NSDate date]]

8. 沙盒路徑

//獲取沙盒 temp
#define kPathTemp NSTemporaryDirectory()
//獲取沙盒 Document
#define kPathDocument [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]
//獲取沙盒 Cache
#define kPathCache [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]
//Library/Caches 文件路徑
#define kFilePath ([[NSFileManager defaultManager] URLForDirectory:NSCachesDirectory inDomain:NSUserDomainMask appropriateForURL:nil create:YES error:nil])

9. 線程

//GCD - 在Main線程上運(yùn)行
#define kMainThread(mainQueueBlock) dispatch_async(dispatch_get_main_queue(), mainQueueBlock);
//GCD - 開啟異步線程
#define kGlobalThread(globalQueueBlock) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), globalQueueBlocl);

10.判空

//字符串是否為空
#define kISNullString(str) ([str isKindOfClass:[NSNull class]] || str == nil || [str length] < 1 ? YES : NO )
//數(shù)組是否為空
#define kISNullArray(array) (array == nil || [array isKindOfClass:[NSNull class]] || array.count == 0 ||[array isEqual:[NSNull null]])
//字典是否為空
#define kISNullDict(dic) (dic == nil || [dic isKindOfClass:[NSNull class]] || dic.allKeys == 0 || [dic isEqual:[NSNull null]])
//是否是空對象
#define kISNullObject(_object) (_object == nil \
|| [_object isKindOfClass:[NSNull class]] \
|| ([_object respondsToSelector:@selector(length)] && [(NSData *)_object length] == 0) \
|| ([_object respondsToSelector:@selector(count)] && [(NSArray *)_object count] == 0))
//判斷對象是否為空,為空則返回默認(rèn)值
#define kGetNullDefaultObj(_value,_default) ([_value isKindOfClass:[NSNull class]] || !_value || _value == nil || [_value isEqualToString:@"(null)"] || [_value isEqualToString:@"<null>"] || [_value isEqualToString:@""] || [_value length] == 0)?_default:_value

11.自定義Log

#ifdef DEBUG
#define NSLog(FORMAT, ...) fprintf(stderr,"%s:%d\t%s\n",[[[NSString stringWithUTF8String:__FILE__] lastPathComponent] UTF8String], __LINE__, [[NSString stringWithFormat:FORMAT, ##__VA_ARGS__] UTF8String]);
#else
#define NSLog(FORMAT, ...) nil
#endif
非常優(yōu)秀的簡書內(nèi)容

http://www.reibang.com/p/56b1a8bd092c
http://www.reibang.com/p/6da4155e09ec

歡迎留言指正,會(huì)持續(xù)更新惠桃。浦夷。。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末辜王,一起剝皮案震驚了整個(gè)濱河市劈狐,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌呐馆,老刑警劉巖懈息,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異摹恰,居然都是意外死亡辫继,警方通過查閱死者的電腦和手機(jī)怒见,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來姑宽,“玉大人遣耍,你說我怎么就攤上這事∨诔担” “怎么了舵变?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長瘦穆。 經(jīng)常有香客問我纪隙,道長,這世上最難降的妖魔是什么扛或? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任绵咱,我火速辦了婚禮,結(jié)果婚禮上熙兔,老公的妹妹穿的比我還像新娘悲伶。我一直安慰自己,他們只是感情好住涉,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布麸锉。 她就那樣靜靜地躺著,像睡著了一般舆声。 火紅的嫁衣襯著肌膚如雪花沉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天媳握,我揣著相機(jī)與錄音主穗,去河邊找鬼。 笑死毙芜,一個(gè)胖子當(dāng)著我的面吹牛忽媒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播腋粥,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼晦雨,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了隘冲?” 一聲冷哼從身側(cè)響起闹瞧,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎展辞,沒想到半個(gè)月后奥邮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年洽腺,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了脚粟。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蘸朋,死狀恐怖核无,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情藕坯,我是刑警寧澤团南,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站炼彪,受9級特大地震影響吐根,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜辐马,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一拷橘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧齐疙,春花似錦、人聲如沸旭咽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽穷绵。三九已至轿塔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間仲墨,已是汗流浹背勾缭。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留目养,地道東北人俩由。 一個(gè)月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像癌蚁,于是被迫代替她去往敵國和親幻梯。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評論 2 348

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

  • 前言 在pch文件中定義常用的宏可以極大的提高開發(fā)效率努释,改善代碼臃腫碘梢,一下是我開發(fā)常用的一些宏定義,供大家參考伐蒂。 ...
    江戶川_亂步閱讀 746評論 0 4
  • 系統(tǒng)高度 快速查詢一段代碼的執(zhí)行時(shí)間 blcok 和self 引起的循環(huán)引用警告??的處理問題 代碼中加入NSLo...
    GavinKang閱讀 1,499評論 2 10
  • 判斷設(shè)備類型iPad/iPhone#define IS_IPAD(UI_USER_INTERFACE_IDIOM(...
    nero_i閱讀 282評論 0 1
  • 聽到這個(gè)消息,我驚訝但不覺意外恩沛,是因?yàn)槔斫膺@樣的感情婚姻在扰,留存只是消耗彼此的能量,放手才是解脫复唤。我給這個(gè)姐姐...
    草木石閱讀 171評論 0 0
  • 健康人的體質(zhì)應(yīng)該呈弱堿性健田,PH值在7.35~7.45之間。當(dāng)人體處于正常的弱堿性時(shí)佛纫,機(jī)體免疫力強(qiáng)妓局、生病機(jī)會(huì)少。 世...
    靜靜有話說閱讀 291評論 0 0