欢迎访问移动开发之家(rcyd.net),关注移动开发教程。移动开发之家  移动开发问答|  每日更新
页面位置 : > > > 内容正文

Xcode学习笔记中关于如何定义宏问题解决

来源: 开发者 投稿于  被查看 20278 次 评论:246

Xcode学习笔记中关于如何定义宏问题解决


Xcode学习笔记中关于如何定义问题解决是本要介绍的内容,主要是来学xcode的学习,具体来看详细讲解。的使用可以节省代码重复输入工作,还可以为调试带来各种好处。本文列出了几个非常简单实用的

这些是我在Xcode中常用到的宏:

CMLog: 用它来代替NSLog:

  1. #define CMLog(format, ...) NSLog(@"%s:%@", __PRETTY_FUNCTION__,[NSString stringWithFormat:format, ## __VA_ARGS__]);  

它的作用是将调用它的类和方法的名称一起输出到控制台。比如你在MyAppDelegate类的applicationDidFinishLaunching方法中调用它:

  1. CMLog(@"My iPhone is an %@, v %@", [[UIDevice currentDevice] model], [[UIDevice currentDevice] systemVersion]);  

控制台将输出:

  1. 2009-01-05 10:06:28.957 MyApp15173:20b]   
  2.      -[MyAppDelegate applicationDidFinishLaunching:]:  
  3. My iPhone is an iPhone Simulator, v 2.2  

MARK: 此宏用于输出调用它的类和方法名称。适用于只想知道是否一个方法被调用了。

  1. #define MARK    CMLog(@"%s", __PRETTY_FUNCTION__);  

START_TIMER和END_TIMER: 用于确定一个方法或一段代码的运行时间:

  1.  #define START_TIMER NSTimeInterval start = [NSDate timeIntervalSinceReferenceDate];    
  2. #define END_TIMER(msg)  NSTimeInterval stop = [NSDate timeIntervalSinceReferenceDate];   
  3. CMLog([NSString stringWithFormat:@"%@ Time = %f";, msg, stop-start]);  

将START_TIMER 置于需评测的代码段开始处,并将END_TIMER置于代码段结束处,你就可获得这段代码的运行时间:

  1.  - (NSData *)loadDataFromURL:(NSString *)dataURL    
  2. {      
  3.     START_TIMER;      
  4.     NSData *data = [self doSomeStuff:dataURL];      
  5.     END_TIMER(@"loadDataFromURL");      
  6.     return data;    
  7. }  

输出为:

  1. 2009-01-05 10:31:37.943 MyApp[15283:20b] -[MyAppDelegate loadDataFromURL:]:  
  2. loadDataFromURL Time = 3.636021    

将所有这些宏定义整理使用条件标志放在预编译的头文件中。调试时,此标志设为1 ,发布时将其设为0 。

  1. #if DEBUG==1    
  2.    #define CMLog(format, ...) NSLog(@"%s:%@";, __PRETTY_FUNCTION__,[NSString stringWithFormat:format, ## __VA_ARGS__]);     
  3.    #define MARK    CMLog(@"%s";, __PRETTY_FUNCTION__);    
  4.    #define START_TIMER NSTimeInterval start = [NSDate timeIntervalSinceReferenceDate];    
  5.    #define END_TIMER(msg)  NSTimeInterval stop = [NSDate timeIntervalSinceReferenceDate]; 
  6. CMLog([NSString stringWithFormat:@"%@ Time = %f";, msg, stop-start]);    
  7. else    
  8.    #define CMLog(format, ...)    
  9.    #define MARK  #define START_TIMER    
  10.    #define END_TIMER(msg)    
  11. endif  

在Debug目标设定中加入:

  1. OTHER_CFLAGS = -DDEBUG=1    

在Release 目标设定中加入:

  1. OTHER_CFLAGS = -DDEBUG=0 

小结:Xcode学习笔记中关于如何定义问题解决的内容介绍完了,希望通过本文的学习能对你有所帮助!

用户评论