tob*_*pwn 4 objective-c ios ios5
更新:
有关这方面的更多信息:
~~~~~~~~~~~~~~~~~~~~~~~~
情况
我有一些非常好的NSLog调用,我用它来调试应用程序中更复杂的部分.但是,我刚刚了解到这些会影响运行时性能!
目标
我希望在任何运行期间删除我的NSLog调用,其中我实际上没有在Xcode中执行Product> Run(aka command-R) - 特别是在App Store上部署此东西的情况下,以及我运行时应用程序从Xcode断开连接时(即只是在街上行走时点击图标).
建议的解决方案?
假设我已经创建了VIEW_DEBUG的预处理器宏,那么下面的实现是否会有效地从我上面描述的情况中删除NSLog调用?
<bunch of code>
#ifdef VIEW_DEBUG
NSLog(@"really complex logs entries");
#endif
<even more code>
Run Code Online (Sandbox Code Playgroud)
对我来说,这是一个很难"测试",所以我认为我会吸引更多有经验的人.:)
Xcode设置(供参考)

Tom*_*mmy 12
一个常见的解决方案是将以下代码放在您的前缀文件中(或者您可以#include根据需要创建一个专用类):
#ifdef DEBUG
#define DebugLog(...) NSLog(__VA_ARGS__)
#else
#define DebugLog(...) while(0)
#endif
Run Code Online (Sandbox Code Playgroud)
在执行调试构建时,Xcode已经为您定义了DEBUG(如屏幕截图所示).VA_ARGS是一种创建C99中引入的可变参数宏的方法.在do/while这DEBUGLOG具有即使什么都不做相同的净效果句法保证-不用担心无谓的循环,优化器将删除它.
然后你可以DebugLog完全按照你的使用方式使用NSLog.这将完全符合您的建议,VIEW_DEBUG但您无需复制和粘贴#ifdef条件一千次.
| 归档时间: |
|
| 查看次数: |
3284 次 |
| 最近记录: |