iOS - pch與headerFile的創(chuàng)建以及常用宏定義的整理

Demo_github

圖片源自網(wǎng)絡(luò)

pch文件創(chuàng)建

  • 在工程中新建一個(gè)PCH 文件:New File ->Other ->PCH File(這就是需要新建的pch文件,點(diǎn)擊該好名字和路徑) ->Create吼蚁。這時(shí)候就創(chuàng)建好了一個(gè)pch文件
pch文件創(chuàng)建1
pch文件創(chuàng)建2
  • 配置pch路徑:
  1. Build Setting 設(shè)置中(搜索 Prefix Header)
    找到Precomplie Prefix Header 這項(xiàng)設(shè)置設(shè)置成YES饰豺。
  2. 把Precomplie Prefix Header 下面一項(xiàng)Prefix Header 雙擊打開削咆,把pch文件拖到打開的對(duì)話框中贬循,回車轮听。
  3. (SRCROOT)拷貝代替 Prefix Header 中的路徑 替換前為:/Users/xxx/Desktop/WLZMakeTrip/WLZMakeTrip/PrefixHeader.pch 替換后為:(SRCROOT)/WLZMakeTrip/PrefixHeader.pch趁冈, 回車掉弛。
配置pch路徑

headerFile創(chuàng)建

  • 在工程中新建一個(gè)headerFile 文件:New File ->Source -> Header File(這就是需要新建的headerFile文件,點(diǎn)擊該好名字和路徑) ->Create搅幅。這時(shí)候就創(chuàng)建好了一個(gè)headerFile文件
headerFile創(chuàng)建1
headerFile創(chuàng)建2
  • 如果Precompile Prefix Header為YES咽斧,那么pch會(huì)被預(yù)編譯堪置,預(yù)編譯后的pch文件會(huì)被緩存起來躬存,從而提高編譯速度

  • 如果Precompile Prefix Header為NO,那么pch不會(huì)被預(yù)編譯舀锨,而是在每一個(gè)用到它導(dǎo)入的框架類庫的.m文件中編譯一次

常用宏定義的整理

我們可以在PCH 文件進(jìn)行宏定義岭洲。headerFile文件中定義接口。并在PCH文件中導(dǎo)入headerFile文件就可全局使用宏定義和接口坎匿。

  1. 獲取屏幕寬度與高度
//需要橫屏或者豎屏盾剩,獲取屏幕寬度與高度
 #if __IPHONE_OS_VERSION_MAX_ALLOWED >= 80000 // 當(dāng)前Xcode支持iOS8及以上

 #define SCREEN_WIDTH ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)]?[UIScreen mainScreen].nativeBounds.size.width/[UIScreen mainScreen].nativeScale:[UIScreen mainScreen].bounds.size.width)
#define SCREENH_HEIGHT ([[UIScreen mainScreen] respondsToSelector:@selector(nativeBounds)]?[UIScreen mainScreen].nativeBounds.size.height/[UIScreen mainScreen].nativeScale:[UIScreen mainScreen].bounds.size.height)
#define SCREEN_SIZE ([[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)
#else
#define SCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
#define SCREENH_HEIGHT [UIScreen mainScreen].bounds.size.height
#define SCREEN_SIZE [UIScreen mainScreen].bounds.size
#endif
  1. 獲取通知中心
#define skyNotificationCenter [NSNotificationCenter defaultCenter]
  1. 設(shè)置顏色
  • 顏色
#define skyRGBColor(r, g, b)    [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1.0]
#define skyRGBAColor(r, g, b, a) [UIColor colorWithRed:(r)/255.0 green:(r)/255.0 blue:(r)/255.0 alpha:a]
  • 十六進(jìn)制顏色
#define skyColorWithHex(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]
  • 隨機(jī)顏色
#define skyRandomColor [UIColor colorWithRed:arc4random_uniform(256)/255.0 green:arc4random_uniform(256)/255.0 blue:arc4random_uniform(256)/255.0 alpha:1.0]
  • clear背景顏色
#define skyClearColor [UIColor clearColor]
  • 淺灰顏色
#define skyGrayColor  kRGBColor(220, 220, 220)
  • 背景色
#define skyBACKGROUNDCOLOR [UIColor colorWithRed:242.0/255.0 green:236.0/255.0 blue:231.0/255.0 alpha:1.0]
  1. 加載本地文件
  • 圖片
#define skyLoadImage(file,type) [UIImageimageWithContentsOfFile:[[NSBundlemainBundle]pathForResource:fileofType:type]]
  • 數(shù)組
#define skyLoadArray(file,type) [UIImagearrayWithContentsOfFile:[[NSBundlemainBundle]pathForResource:fileofType:type]]
  • 字典
#define skyLoadDict(file,type) [UIImagedictionaryWithContentsOfFile:[[NSBundlemainBundle]pathForResource:fileofType:type]]
  1. 自定義高效率的 NSLog(開發(fā)的時(shí)候打印,但是發(fā)布的時(shí)候不打印的NSLog)
#ifdef DEBUG
#define SLog(...) NSLog(@"%s 第%d行 \n %@\n\n",__func__,__LINE__,[NSString stringWithFormat:__VA_ARGS__])
#else
#define SLog(...)
#endif
  1. 弱引用(block循環(huán)引用)
#define WS(weakSelf)  __weak __typeof(&*self)weakSelf = self;
  1. 設(shè)置 view 圓角和邊框
#define skyViewBorderRadius(View, Radius, Width, Color)\
\
[View.layer setCornerRadius:(Radius)];\
[View.layer setMasksToBounds:YES];\
[View.layer setBorderWidth:(Width)];\
[View.layer setBorderColor:[Color CGColor]]
  1. 由角度轉(zhuǎn)換弧度 由弧度轉(zhuǎn)換角度
#define skyDegreesToRadian(x) (M_PI * (x) / 180.0)
#define skyRadianToDegrees(radian) (radian*180.0)/(M_PI)
  1. 字符串是否為空
#define skyStringIsEmpty(str) ([str isKindOfClass:[NSNull class]] || str == nil || ([str length] < 1) ? (YES) : (NO))
  1. 數(shù)組是否為空
#define skyArrayIsEmpty(array) (array == nil || [array isKindOfClass:[NSNull class]] || array.count == 0)
  1. 獲取圖片資源
#define skyGetImage(imageName) [UIImage imageNamed:[NSString stringWithFormat:@"%@",imageName]]
  1. 獲取當(dāng)前語言
#define skyCurrentLanguage ([[NSLocale preferredLanguages] objectAtIndex:0])
  1. 屏幕尺寸
// 狀態(tài)欄占用高度
#define skyStateBarHeight          20.f
// 狀態(tài)欄底部y坐標(biāo)
#define skyOffsetStateBarHeight    ((DEVICE_OS_VERSION_VALUE >= 7.0)? StateBarHeight : 0.f)
// 頂部狀態(tài)欄占用高度
#define skyTopNavBarHeight         44.f
// 頂部導(dǎo)航欄底部y坐標(biāo)
#define skyOffsetTopNavBarHeight   (OffsetStateBarHeight + TopNavBarHeight)
// 底部tabbar占用高度
#define skyBottomTabBarHeight      49.f
// 屏幕可操作高度
#define skyMainHeight              ((DEVICE_OS_VERSION_VALUE >= 7.0)? SCREENH_HEIGHT : (SCREENH_HEIGHT - StateBarHeight))
// 屏幕可操作寬度
#define skyMainWidth               SCREEN_WIDTH
// 去除上下導(dǎo)航欄剩余中間視圖高度
#define skyContentHeight           (skyMainHeight -skyOffsetTopNavBarHeight -skyBottomTabBarHeight)
  1. 判斷當(dāng)前的iPhone設(shè)備/系統(tǒng)版本
  • 判斷是否為iPhone
#define sky_IS_IPHONE (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone)
  • 判斷是否為iPad
#define sky_IS_IPAD (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad)
  • 判斷是否為ipod
#define sky_IS_IPOD ([[[UIDevice currentDevice] model] isEqualToString:@"iPod touch"])
  • 判斷是否為 iPhone 5SE
#define sky_iPhone5SE [[UIScreen mainScreen] bounds].size.width == 320.0f && [[UIScreen mainScreen] bounds].size.height == 568.0f
  • 判斷是否為iPhone 6/6s/7
#define sky_iPhone6_6s_7 [[UIScreen mainScreen] bounds].size.width == 375.0f && [[UIScreen mainScreen] bounds].size.height == 667.0f
  • 判斷是否為iPhone 6Plus/6sPlus/7Plus
#define sky_iPhone6Plus_6sPlus_7Plus [[UIScreen mainScreen] bounds].size.width == 414.0f && [[UIScreen mainScreen] bounds].size.height == 736.0f
  • 獲取系統(tǒng)版本
//這個(gè)方法不是特別靠譜
#define sky_IOS_SYSTEM_VERSION [[[UIDevice currentDevice] systemVersion] floatValue]
//建議使用這個(gè)方法
#define sky_IOS_SYSTEM_VERSION_STRING [[UIDevice currentDevice] systemVersion]
  • 判斷 iOS 8 或更高的系統(tǒng)版本
#define IOS_VERSION_8_OR_LATER (([[[UIDevice currentDevice] systemVersion] floatValue] >=8.0)? (YES):(NO))
  1. 判斷是真機(jī)還是模擬器
 #if TARGET_OS_IPHONE
//iPhone Device
#endif
#if TARGET_IPHONE_SIMULATOR
//iPhone Simulator
#endif
  1. 沙盒目錄文件
//NSUserDefaults 實(shí)例化
#define skyUserDefaults [NSUserDefaults standardUserDefaults]
//獲取temp
#define skyPathTemp NSTemporaryDirectory()
//獲取沙盒 Document
#define skyPathDocument  [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]
//獲取沙盒 Cache
#define skyPathCache  [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]
  1. GCD 的宏定義
  • GCD - 一次性執(zhí)行
#define sky_DISPATCH_ONCE_BLOCK(onceBlock) static dispatch_once_t onceToken; dispatch_once(&onceToken, onceBlock);
  • GCD - 在Main線程上運(yùn)行
#define sky_DISPATCH_MAIN_THREAD(mainQueueBlock) dispatch_async(dispatch_get_main_queue(), mainQueueBlock);
  • GCD - 開啟異步線程
#define sky_DISPATCH_GLOBAL_QUEUE_DEFAULT(globalQueueBlock) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), globalQueueBlocl);

Demo_github

參考文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末替蔬,一起剝皮案震驚了整個(gè)濱河市告私,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌承桥,老刑警劉巖驻粟,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異快毛,居然都是意外死亡格嗅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門唠帝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來屯掖,“玉大人,你說我怎么就攤上這事襟衰√” “怎么了?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵瀑晒,是天一觀的道長(zhǎng)绍坝。 經(jīng)常有香客問我,道長(zhǎng)苔悦,這世上最難降的妖魔是什么轩褐? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮玖详,結(jié)果婚禮上把介,老公的妹妹穿的比我還像新娘。我一直安慰自己蟋座,他們只是感情好拗踢,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著向臀,像睡著了一般巢墅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天君纫,我揣著相機(jī)與錄音驯遇,去河邊找鬼。 笑死蓄髓,一個(gè)胖子當(dāng)著我的面吹牛妹懒,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播双吆,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼会前!你這毒婦竟也來了好乐?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬榮一對(duì)情侶失蹤瓦宜,失蹤者是張志新(化名)和其女友劉穎蔚万,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體临庇,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡反璃,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了假夺。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片淮蜈。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖已卷,靈堂內(nèi)的尸體忽然破棺而出梧田,到底是詐尸還是另有隱情,我是刑警寧澤侧蘸,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布裁眯,位于F島的核電站,受9級(jí)特大地震影響讳癌,放射性物質(zhì)發(fā)生泄漏穿稳。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一晌坤、第九天 我趴在偏房一處隱蔽的房頂上張望逢艘。 院中可真熱鬧,春花似錦泡仗、人聲如沸埋虹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搔课。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間爬泥,已是汗流浹背柬讨。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留袍啡,地道東北人踩官。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像境输,于是被迫代替她去往敵國(guó)和親蔗牡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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

  • 在工作中, 很多小伙伴都會(huì)在PCH文件定義一些常用的宏嗅剖,但是又怕寫這些簡(jiǎn)單的宏浪費(fèi)時(shí)間辩越,又有時(shí)候忘記怎么定義了怎么...
    迪亞波羅閱讀 450評(píng)論 0 0
  • 定義了一些常用的宏,寫代碼的時(shí)候用起來挺方便的信粮,添加了pch文件黔攒,設(shè)置了相對(duì)路徑;設(shè)置pch文件相對(duì)路徑的方法:設(shè)...
    SnailLi閱讀 1,685評(píng)論 0 1
  • iOS開發(fā)過程中强缘,使用的一些常用宏定義 字符串是否為空#define kStringIsEmpty(str) ([...
    goyohol閱讀 5,353評(píng)論 30 85
  • 轉(zhuǎn)載于:http://blog.csdn.net/hbblzjy/article/details/51859570...
    狼之獨(dú)步閱讀 576評(píng)論 0 0
  • 前言: 在工作中, 很多小伙伴都會(huì)在PCH文件定義一些常用的宏督惰,但是又怕寫這些簡(jiǎn)單的宏浪費(fèi)時(shí)間,又有時(shí)候忘記怎么定...
    sherry155閱讀 458評(píng)論 0 0