iOS開發(fā)中那些高效常用的宏

iOS開發(fā)過程中使用一些常用的宏可以提高開發(fā)效率,提高代碼的重用性轴脐;將這些宏放到一個頭文件里然后再放到工程中的-Prefix.pch文件中(或者直接放到-Prefix.pch中)直接可以使用,灰常方便届榄。

本文整理自http://www.cocoachina.com/applenews/devnews/2013/0328/5907.html匀哄。

做了一些分類和注釋,可以根據(jù)自己習(xí)慣再添加或者刪除或者修改這些宏進(jìn)行使用。

//??MacroDefinition.h

//??MacroDefinitionDemo


#ifndef?MacroDefinition_h

#define?MacroDefinition_h

//-------------------獲取設(shè)備大小-------------------------

//NavBar高度

#define?NavigationBar_HEIGHT?44

//獲取屏幕?寬度抱究、高度

#define?SCREEN_WIDTH?([UIScreen?mainScreen].bounds.size.width)

#define?SCREEN_HEIGHT?([UIScreen?mainScreen].bounds.size.height)

//-------------------獲取設(shè)備大小-------------------------

//-------------------打印日志-------------------------

//DEBUG??模式下打印日志,當(dāng)前行

#ifdef?DEBUG

#???define?DLog(fmt,?...)?NSLog((@"%s?[Line?%d]?"?fmt),?__PRETTY_FUNCTION__,?__LINE__,?##__VA_ARGS__);

#else

#???define?DLog(...)

#endif

//重寫NSLog,Debug模式下打印日志和當(dāng)前行數(shù)

#if?DEBUG

#define?NSLog(FORMAT,?...)?fprintf(stderr,"\nfunction:%s?line:%d?content:%s\n",?__FUNCTION__,?__LINE__,?[[NSString?stringWithFormat:FORMAT,?##__VA_ARGS__]?UTF8String]);

#else

#define?NSLog(FORMAT,?...)?nil

#endif

//DEBUG??模式下打印日志,當(dāng)前行?并彈出一個警告

#ifdef?DEBUG

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

#define?ITTDEBUG

#define?ITTLOGLEVEL_INFO?????10

#define?ITTLOGLEVEL_WARNING??3

#define?ITTLOGLEVEL_ERROR????1

#ifndef?ITTMAXLOGLEVEL

#ifdef?DEBUG

#define?ITTMAXLOGLEVEL?ITTLOGLEVEL_INFO

#else

#define?ITTMAXLOGLEVEL?ITTLOGLEVEL_ERROR

#endif

#endif

//?The?general?purpose?logger.?This?ignores?logging?levels.

#ifdef?ITTDEBUG

#define?ITTDPRINT(xx,?...)??NSLog(@"%s(%d):?"?xx,?__PRETTY_FUNCTION__,?__LINE__,?##__VA_ARGS__)

#else

#define?ITTDPRINT(xx,?...)??((void)0)

#endif

//?Prints?the?current?method's?name.

#define?ITTDPRINTMETHODNAME()?ITTDPRINT(@"%s",?__PRETTY_FUNCTION__)

//?Log-level?based?logging?macros.

#if?ITTLOGLEVEL_ERROR?<=?ITTMAXLOGLEVEL

#define?ITTDERROR(xx,?...)??ITTDPRINT(xx,?##__VA_ARGS__)

#else

#define?ITTDERROR(xx,?...)??((void)0)

#endif

#if?ITTLOGLEVEL_WARNING?<=?ITTMAXLOGLEVEL

#define?ITTDWARNING(xx,?...)??ITTDPRINT(xx,?##__VA_ARGS__)

#else

#define?ITTDWARNING(xx,?...)??((void)0)

#endif

#if?ITTLOGLEVEL_INFO?<=?ITTMAXLOGLEVEL

#define?ITTDINFO(xx,?...)??ITTDPRINT(xx,?##__VA_ARGS__)

#else

#define?ITTDINFO(xx,?...)??((void)0)

#endif

#ifdef?ITTDEBUG

#define?ITTDCONDITIONLOG(condition,?xx,?...)?{?if?((condition))?{?\

ITTDPRINT(xx,?##__VA_ARGS__);?\

}?\

}?((void)0)

#else

#define?ITTDCONDITIONLOG(condition,?xx,?...)?((void)0)

#endif

#define?ITTAssert(condition,?...)???????????????????????????????????????\

do{??????????????????????????????????????????????????????????????????????\

if(!(condition))?{?????????????????????????????????????????????????????\

[[NSAssertionHandler?currentHandler]??????????????????????????????????\

handleFailureInFunction:[NSString?stringWithUTF8String:__PRETTY_FUNCTION__]?\

file:[NSString?stringWithUTF8String:__FILE__]??\

lineNumber:__LINE__??????????????????????????????????\

description:__VA_ARGS__];?????????????????????????????\

}???????????????????????????????????????????????????????????????????????\

}while(0)

//---------------------打印日志--------------------------

//----------------------系統(tǒng)----------------------------

//獲取系統(tǒng)版本

#define?IOS_VERSION?[[[UIDevice?currentDevice]?systemVersion]?floatValue]

#define?CurrentSystemVersion?[[UIDevice?currentDevice]?systemVersion]

//獲取當(dāng)前語言

#define?CurrentLanguage?([[NSLocale?preferredLanguages]?objectAtIndex:0])

//判斷是否?Retina屏恢氯、設(shè)備是否%fhone?5、是否是iPad

#define?isRetina?([UIScreen?instancesRespondToSelector:@selector(currentMode)]???CGSizeEqualToSize(CGSizeMake(640,?960),?[[UIScreen?mainScreen]?currentMode].size)?:?NO)

#define?iPhone5?([UIScreen?instancesRespondToSelector:@selector(currentMode)]???CGSizeEqualToSize(CGSizeMake(640,?1136),?[[UIScreen?mainScreen]?currentMode].size)?:?NO)

#define?isPad?(UI_USER_INTERFACE_IDIOM()?==?UIUserInterfaceIdiomPad)

//判斷是真機(jī)還是模擬器

#if?TARGET_OS_IPHONE

//iPhone?Device

#endif

#if?TARGET_IPHONE_SIMULATOR

//iPhone?Simulator

#endif

//檢查系統(tǒng)版本

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

//----------------------系統(tǒng)----------------------------

//----------------------內(nèi)存----------------------------

//使用ARC和不使用ARC

#if?__has_feature(objc_arc)

//compiling?with?ARC

#else

//?compiling?without?ARC

#endif

#pragma?mark?-?common?functions

#define?RELEASE_SAFELY(__POINTER)?{?[__POINTER?release];?__POINTER?=?nil;?}

//釋放一個對象

#define?SAFE_DELETE(P)?if(P)?{?[P?release],?P?=?nil;?}

#define?SAFE_RELEASE(x)?[x?release];x=nil

//----------------------內(nèi)存----------------------------

//----------------------圖片----------------------------

//讀取本地圖片

#define?LOADIMAGE(file,ext)?[UIImage?imageWithContentsOfFile:[[NSBundle?mainBundle]pathForResource:file?ofType:ext]]

//定義UIImage對象

#define?IMAGE(A)?[UIImage?imageWithContentsOfFile:[[NSBundle?mainBundle]?pathForResource:A?ofType:nil]]

//定義UIImage對象

#define?ImageNamed(_pointer)?[UIImage?imageNamed:[UIUtil?imageName:_pointer]]

//建議使用前兩種宏定義,性能高于后者

//----------------------圖片----------------------------

//----------------------顏色類---------------------------

//?rgb顏色轉(zhuǎn)換(16進(jìn)制->10進(jìn)制)

#define?UIColorFromRGB(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]

//帶有RGBA的顏色設(shè)置

#define?COLOR(R,?G,?B,?A)?[UIColor?colorWithRed:R/255.0?green:G/255.0?blue:B/255.0?alpha:A]

//?獲取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?BACKGROUND_COLOR?[UIColor?colorWithRed:242.0/255.0?green:236.0/255.0?blue:231.0/255.0?alpha:1.0]

//清除背景色

#define?CLEARCOLOR?[UIColor?clearColor]

#pragma?mark?-?color?functions

#define?RGBCOLOR(r,g,b)?[UIColor?colorWithRed:(r)/255.0f?green:(g)/255.0f?blue:(b)/255.0f?alpha:1]

#define?RGBACOLOR(r,g,b,a)?[UIColor?colorWithRed:(r)/255.0f?green:(g)/255.0f?blue:(b)/255.0f?alpha:(a)]

//----------------------顏色類--------------------------

//----------------------其他----------------------------

//方正黑體簡體字體定義

#define?FONT(F)?[UIFont?fontWithName:@"FZHTJW--GB1-0"?size:F]

//定義一個API

#define?APIURL????????????????@"http://xxxxx/"

//登陸API

#define?APILogin??????????????[APIURL?stringByAppendingString:@"Login"]

//設(shè)置View的tag屬性

#define?VIEWWITHTAG(_OBJECT,?_TAG)????[_OBJECT?viewWithTag?:?_TAG]

//程序的本地化,引用國際化的文件

#define?MyLocal(x,?...)?NSLocalizedString(x,?nil)

//G-C-D

#define?BACK(block)?dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,?0),?block)

#define?MAIN(block)?dispatch_async(dispatch_get_main_queue(),block)

//NSUserDefaults?實(shí)例化

#define?USER_DEFAULT?[NSUserDefaults?standardUserDefaults]

//由角度獲取弧度?有弧度獲取角度

#define?degreesToRadian(x)?(M_PI?*?(x)?/?180.0)

#define?radianToDegrees(radian)?(radian*180.0)/(M_PI)

//單例化一個類

#define?SYNTHESIZE_SINGLETON_FOR_CLASS(classname)?\

\

staticclassname?*shared##classname?=?nil;?\

\

+?(classname?*)shared##classname?\

{?\

@synchronized(self)?\

{?\

if(shared##classname?==?nil)?\

{?\

shared##classname?=?[[self?alloc]?init];?\

}?\

}?\

\

returnshared##classname;?\

}?\

\

+?(id)allocWithZone:(NSZone?*)zone?\

{?\

@synchronized(self)?\

{?\

if(shared##classname?==?nil)?\

{?\

shared##classname?=?[super?allocWithZone:zone];?\

returnshared##classname;?\

}?\

}?\

\

returnnil;?\

}?\

\

-?(id)copyWithZone:(NSZone?*)zone?\

{?\

returnself;?\

}

#endif

MacroDefinition.h ?下載地址:https://github.com/XFZLDXF/Macro

CSDN下載:http://download.csdn.net/detail/duxinfeng2010/5555367

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鼓寺,一起剝皮案震驚了整個濱河市勋拟,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌妈候,老刑警劉巖敢靡,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異苦银,居然都是意外死亡啸胧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進(jìn)店門幔虏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來纺念,“玉大人,你說我怎么就攤上這事想括∧牵” “怎么了?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵主胧,是天一觀的道長叭首。 經(jīng)常有香客問我,道長踪栋,這世上最難降的妖魔是什么焙格? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任,我火速辦了婚禮夷都,結(jié)果婚禮上眷唉,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好冬阳,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布蛤虐。 她就那樣靜靜地躺著,像睡著了一般肝陪。 火紅的嫁衣襯著肌膚如雪驳庭。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天氯窍,我揣著相機(jī)與錄音饲常,去河邊找鬼。 笑死狼讨,一個胖子當(dāng)著我的面吹牛贝淤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播政供,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼播聪,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了布隔?” 一聲冷哼從身側(cè)響起离陶,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎执泰,沒想到半個月后枕磁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡术吝,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年计济,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片排苍。...
    茶點(diǎn)故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡沦寂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出淘衙,到底是詐尸還是另有隱情传藏,我是刑警寧澤,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布彤守,位于F島的核電站毯侦,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏具垫。R本人自食惡果不足惜侈离,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望筝蚕。 院中可真熱鬧卦碾,春花似錦铺坞、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至绿映,卻和暖如春擒滑,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绘梦。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工橘忱, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赴魁,地道東北人卸奉。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像颖御,于是被迫代替她去往敵國和親榄棵。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評論 2 351

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