Xcode学习笔记中关于如何定义宏问题解决
2013-02-26 11:03
453 查看
Xcode学习笔记中关于如何定义宏问题解决是本要介绍的内容,主要是来学xcode中宏的学习,具体来看详细讲解。宏的使用可以节省代码重复输入工作,还可以为调试带来各种好处。本文列出了几个非常简单实用的宏。
这些是我在Xcode中常用到的宏:
CMLog: 用它来代替NSLog:
它的作用是将调用它的类和方法的名称一起输出到控制台。比如你在MyAppDelegate类的applicationDidFinishLaunching方法中调用它:
控制台将输出:
MARK: 此宏用于输出调用它的类和方法名称。适用于只想知道是否一个方法被调用了。
START_TIMER和END_TIMER: 用于确定一个方法或一段代码的运行时间:
将START_TIMER 置于需评测的代码段开始处,并将END_TIMER置于代码段结束处,你就可获得这段代码的运行时间:
输出为:
将所有这些宏定义整理使用条件标志放在预编译的头文件中。调试时,此标志设为1 ,发布时将其设为0 。
在Debug目标设定中加入:
在Release 目标设定中加入:
这些是我在Xcode中常用到的宏:
CMLog: 用它来代替NSLog:
#define CMLog(format, ...) NSLog(@"%s:%@", __PRETTY_FUNCTION__,[NSString stringWithFormat:format, ## __VA_ARGS__]);
它的作用是将调用它的类和方法的名称一起输出到控制台。比如你在MyAppDelegate类的applicationDidFinishLaunching方法中调用它:
CMLog(@"My iPhone is an %@, v %@", [[UIDevice currentDevice] model], [[UIDevice currentDevice] systemVersion]);
控制台将输出:
2009-01-05 10:06:28.957 MyApp15173:20b] -[MyAppDelegate applicationDidFinishLaunching:]: My iPhone is an iPhone Simulator, v 2.2
MARK: 此宏用于输出调用它的类和方法名称。适用于只想知道是否一个方法被调用了。
#define MARK CMLog(@"%s", __PRETTY_FUNCTION__);
START_TIMER和END_TIMER: 用于确定一个方法或一段代码的运行时间:
#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 置于需评测的代码段开始处,并将END_TIMER置于代码段结束处,你就可获得这段代码的运行时间:
- (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
将所有这些宏定义整理使用条件标志放在预编译的头文件中。调试时,此标志设为1 ,发布时将其设为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目标设定中加入:
OTHER_CFLAGS = -DDEBUG=1
在Release 目标设定中加入:
OTHER_CFLAGS = -DDEBUG=0
相关文章推荐
- Xcode学习笔记中关于如何定义宏问题解决
- “模板”学习笔记(4)-----如何解决函数模板的重载问题
- Xcode学习笔记中关于如何定义宏问题解决
- 关于有容量下界的网络可行流问题解决的学习笔记 ZOJ 2314 ZOJ 3229 HDU 3157
- 黑马程序员之ASP.NET学习笔记:AJAX解决什么问题?如何使用AJAX?
- 学习笔记 如何解决IE6 position:fixed固定定位问题{转载}
- iOS学习笔记4 --关于xcode 5.1 x86 - 64 编译问题
- 菜鸟学习嵌入式 问题笔记之 关于-/bin/sh: 命令:not found的解决办法
- 【树莓派学习笔记】关于树莓派2代,更新最新内核后,DS18B20温度传感器无法找到对应文件的问题的解决
- SilverLight学习笔记--如何解决Button不响应MouseLeftButtonDown与MouseLeftButtonUp事件的问题
- 菜鸟学习嵌入式 问题笔记之 关于-/bin/sh: 命令:not found的解决办法
- PHP7 学习笔记(三)关于PHP7如何安装调试工具Xdebug扩展以及Zephir的问题
- PowerShell的学习笔记(4)---- 如何在使用Enter-PSSession的时候解决TrustedHosts list的问题?
- ajax学习笔记---解决浏览器缓存和中文乱码问题
- Python学习笔记(二)--解决中文的问题
- iOS指南系列:如何解决奔溃问题-关于内存访问续
- 关于解决如何统一Maven工程下各个子工程运行环境的版本问题
- 简明pyton教程学习笔记 6-10 控制流+函数+模块+数据结构+解决问题
- SQL Server安装时COM+目录要求问题的解决(学习笔记)
- 在传智的学习感受——如何优雅地解决心态炸裂问题