Xcode學(xué)習(xí)筆記中關(guān)于如何定義宏問(wèn)題解決
Xcode學(xué)習(xí)筆記中關(guān)于如何定義宏問(wèn)題解決是本要介紹的內(nèi)容,主要是來(lái)學(xué)xcode中宏的學(xué)習(xí),具體來(lái)看詳細(xì)講解。宏的使用可以節(jié)省代碼重復(fù)輸入工作,還可以為調(diào)試帶來(lái)各種好處。本文列出了幾個(gè)非常簡(jiǎn)單實(shí)用的宏。
這些是我在Xcode中常用到的宏:
CMLog: 用它來(lái)代替NSLog:
- #define CMLog(format, ...) NSLog(@"%s:%@", __PRETTY_FUNCTION__,[NSString stringWithFormat:format, ## __VA_ARGS__]);
它的作用是將調(diào)用它的類和方法的名稱一起輸出到控制臺(tái)。比如你在MyAppDelegate類的applicationDidFinishLaunching方法中調(diào)用它:
- CMLog(@"My iPhone is an %@, v %@", [[UIDevice currentDevice] model], [[UIDevice currentDevice] systemVersion]);
控制臺(tái)將輸出:
- 2009-01-05 10:06:28.957 MyApp15173:20b]
- -[MyAppDelegate applicationDidFinishLaunching:]:
- My iPhone is an iPhone Simulator, v 2.2
MARK: 此宏用于輸出調(diào)用它的類和方法名稱。適用于只想知道是否一個(gè)方法被調(diào)用了。
- #define MARK CMLog(@"%s", __PRETTY_FUNCTION__);
START_TIMER和END_TIMER: 用于確定一個(gè)方法或一段代碼的運(yùn)行時(shí)間:
- #define START_TIMER NSTimeInterval start = [NSDate timeIntervalSinceReferenceDate];
- #define END_TIMER(msg) NSTimeInterval stop = [NSDate timeIntervalSinceReferenceDate];
- CMLog([NSString stringWithFormat:@"%@ Time = %f";, msg, stop-start]);
將START_TIMER 置于需評(píng)測(cè)的代碼段開始處,并將END_TIMER置于代碼段結(jié)束處,你就可獲得這段代碼的運(yùn)行時(shí)間:
- - (NSData *)loadDataFromURL:(NSString *)dataURL
- {
- START_TIMER;
- NSData *data = [self doSomeStuff:dataURL];
- END_TIMER(@"loadDataFromURL");
- return data;
- }
輸出為:
- 2009-01-05 10:31:37.943 MyApp[15283:20b] -[MyAppDelegate loadDataFromURL:]:
- loadDataFromURL Time = 3.636021
將所有這些宏定義整理使用條件標(biāo)志放在預(yù)編譯的頭文件中。調(diào)試時(shí),此標(biāo)志設(shè)為1 ,發(fā)布時(shí)將其設(shè)為0 。
- #if DEBUG==1
- #define CMLog(format, ...) NSLog(@"%s:%@";, __PRETTY_FUNCTION__,[NSString stringWithFormat:format, ## __VA_ARGS__]);
- #define MARK CMLog(@"%s";, __PRETTY_FUNCTION__);
- #define START_TIMER NSTimeInterval start = [NSDate timeIntervalSinceReferenceDate];
- #define END_TIMER(msg) NSTimeInterval stop = [NSDate timeIntervalSinceReferenceDate];
- CMLog([NSString stringWithFormat:@"%@ Time = %f";, msg, stop-start]);
- else
- #define CMLog(format, ...)
- #define MARK #define START_TIMER
- #define END_TIMER(msg)
- endif
在Debug目標(biāo)設(shè)定中加入:
- OTHER_CFLAGS = -DDEBUG=1
在Release 目標(biāo)設(shè)定中加入:
- OTHER_CFLAGS = -DDEBUG=0
小結(jié):Xcode學(xué)習(xí)筆記中關(guān)于如何定義宏問(wèn)題解決的內(nèi)容介紹完了,希望通過(guò)本文的學(xué)習(xí)能對(duì)你有所幫助!