使用Xcode為iOS應(yīng)用項(xiàng)目創(chuàng)建PCH文件的方法及應(yīng)用示例
pch 可以用來(lái)存儲(chǔ)共享信息,比如設(shè)備屏幕的寬度,高度。版本號(hào)等等 公用信息
Xcode 老版本會(huì)自動(dòng)為我們創(chuàng)建pch文件,新版本開(kāi)始不自動(dòng)創(chuàng)建了,如果需要使用可以自己手動(dòng)創(chuàng)建
創(chuàng)建完成后可以在里面定義常量
此處以屏幕尺寸為例
如下
代碼如下:
//獲取屏幕 寬度、高度
#define SCREEN_FRAME ([UIScreen mainScreen].applicationFrame)
#define SCREEN_WIDTH ([UIScreen mainScreen].bounds.size.width)
#define SCREEN_HEIGHT ([UIScreen mainScreen].bounds.size.height)
然后在程序中使用 可以直接 使用
CGRectMake(0,60,SCREEN_WIDTH, SCREEN_HEIGHT-60)
PCH文件的應(yīng)用舉例:
在PCH文件中存放宏就是正常的創(chuàng)建,這里不舉例了。
在PCH文件中存放頭文件經(jīng)常用于分類(lèi),比如我們給UIColor增加了一個(gè)分類(lèi),并且希望在多個(gè)文件中使用這個(gè)分類(lèi),那么就可以在PCH文件中導(dǎo)入此分類(lèi)的頭文件。
在PCH文件中自定義一些有用的宏,比如代替NSLog:
#define JYLog(...) NSLog(__VA_ARGS__)
我們知道NSLog耗費(fèi)性能,在調(diào)試階段完成后需要將NSLog都刪除掉,但是隨著文件的增多,NSLog則不好控制,每一個(gè)都去找很浪費(fèi)時(shí)間。
此時(shí)我們可以利用宏來(lái)完成自動(dòng)開(kāi)啟/關(guān)閉NSLog的功能。
#ifdef DEBUG
// 調(diào)試階段
#define JYLog(...) NSLog(__VA_ARGS__)
#else
// 發(fā)布階段
#define JYLog(...)
#endif
當(dāng)處于調(diào)試階段,JYLog的作用相當(dāng)于NSLog,而在發(fā)布階段則JYLog的作用相當(dāng)于空。這樣用JYLog代替NSLog就可以完成之前我們希望做的。
DEBUG的值會(huì)隨著Xcode中的設(shè)置改變而改變。
Edit Scheme -> Run -> Info -> Build Configuration.
Debug代表調(diào)試階段。
Release代表發(fā)布階段。
但是如果這樣做可能有潛在的危險(xiǎn)。前面說(shuō)過(guò)PCH文件的內(nèi)容會(huì)拷貝到每個(gè)文件,所以如果此時(shí)我們創(chuàng)建一個(gè).c文件,在這個(gè)文件中同樣會(huì)拷貝PCH中的內(nèi)容,如果PCH文件中出現(xiàn)C語(yǔ)言不能識(shí)別的,那么很明顯會(huì)出錯(cuò)。
我們希望PCH文件只在Objective-C的范圍內(nèi)有效(OC文件內(nèi)拷貝PCH文件內(nèi)容),所以需要再進(jìn)行判斷:
#ifdef __OBJC__
#ifdef DEBUG
// 調(diào)試階段
#define JYLog(...) NSLog(__VA_ARGS__)
#else
// 發(fā)布階段
#define JYLog(...)
#endif
#endif
至此才能保證正確使用。
因?yàn)镻CH文件的內(nèi)容會(huì)拷貝到每一個(gè)文件中,即使這個(gè)文件并未用到PCH文件的內(nèi)容。所以在使用PCH文件的時(shí)候要慎重,這可能也是Apple不再默認(rèn)創(chuàng)建它的原因吧。
- iOS Xcode8更新后輸出log日志關(guān)閉的方法
- Xcode中iOS應(yīng)用開(kāi)發(fā)的一般項(xiàng)目目錄結(jié)構(gòu)和流程簡(jiǎn)介
- 更新了Xcode8 及 iOS10遇到的問(wèn)題小結(jié)
- iOS10 適配-Xcode8問(wèn)題總結(jié)及解決方案
- Xcode8以及iOS10適配等常見(jiàn)問(wèn)題匯總(整理篇)
- iOS10開(kāi)發(fā)和Xcode 8新特性及常見(jiàn)問(wèn)題解析
- 兼容iOS 10 升級(jí)xcode8出現(xiàn)的問(wèn)題及一些適配問(wèn)題的解決方案
- 針對(duì)iOS開(kāi)發(fā)的一些Xcode使用技巧小結(jié)
- iOS中Xcode 8 日志輸出亂碼問(wèn)題的解決方法
- 110.iOS10新特性適配教程XCode8新特性解析
- IOS Xcode調(diào)試常用命令和斷點(diǎn)整理
相關(guān)文章
iOS11 WKWebView內(nèi)容過(guò)濾規(guī)則詳解
本篇文章主要介紹了iOS11 WKWebView內(nèi)容過(guò)濾規(guī)則詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07iOS中設(shè)置清除緩存功能的實(shí)現(xiàn)方法
清除緩存基本上都是在設(shè)置界面的某一個(gè)Cell,于是我們可以把清除緩存封裝在某一個(gè)自定義Cell中,現(xiàn)在位大家介紹一種最基礎(chǔ)的清除緩存的方法,感興趣的朋友一起看看吧2017-07-07iOS UICollectionView實(shí)現(xiàn)卡片效果
這篇文章主要為大家詳細(xì)介紹了iOS UICollectionView實(shí)現(xiàn)卡片效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-04-04IOS實(shí)現(xiàn)簡(jiǎn)單的進(jìn)度條功能
這篇文章主要介紹了IOS實(shí)現(xiàn)簡(jiǎn)單的進(jìn)度條功能的相關(guān)資料,需要的朋友可以參考下2016-01-01iOS開(kāi)發(fā)中使用UILabel設(shè)置字體的相關(guān)技巧小結(jié)
這篇文章主要介紹了iOS開(kāi)發(fā)中UILabel設(shè)置字體的相關(guān)技巧小結(jié),代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下2016-01-01iOS自動(dòng)生成表格效果的實(shí)現(xiàn)代碼
這篇文章主要為大家詳細(xì)介紹了iOS自動(dòng)生成表格效果的實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03iOS實(shí)現(xiàn)UIScrollView的無(wú)限輪播功能(原理)詳解
在現(xiàn)在的一些App中常常見(jiàn)到圖片輪播器,一般用于展示廣告、新聞等數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于iOS實(shí)現(xiàn)UIScrollView的無(wú)限輪播功能(原理)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2018-09-09