如何禁用NSLog?

时间:2011-07-18 11:39:57

标签: objective-c xcode

我想在Xcode中执行以下操作:

查找所有没有注释的NSLog命令,并将其替换为// NSLog ...

换句话说,我想评论所有NSLog调用。这可能吗?有一个简单的方法吗?

15 个答案:

答案 0 :(得分:78)

等待有更简单的方法。当您不需要NSLOG到常量文件时,只需添加以下行

#define NSLog                       //

并在需要时对其进行评论。

编辑:在最新的Xcode中,您在上述声明中收到错误。所以我想出了最好的方法是

#define NSLog(...) 

答案 1 :(得分:16)

<强>更新

下面的答案实际上要好得多。见here.

初步答案:

你可以做一点点黑客攻击。搜索所有NSLog并将其替换为//NSLog,然后再搜索////NSLog,并将其替换为//NSLog

答案 2 :(得分:12)

#define NSLog if(1) NSLog

如果您不希望将日志集1设为为0.

答案 3 :(得分:10)

我必须单独回答,因为我还无法发表评论,但是当你进行查找和替换时,你真正需要注意的一件事是这样的:

if(BOOL)
NSLog(@"blah blah");

[self doSomething];

如果您注释掉nslog,条件会与下面的方法相关联,如果我错了,请更正我

答案 4 :(得分:7)

您的答案对您的问题是正确的。但。您真正的问题是如何在某些条件下转换NSLog。即你希望它们显示为Debug版本,而不是Release版本。在这种情况下,请尝试按照Cocoa Is My Girlfriend中的说明定义和使用DLog()宏。如果你正在使用Xcode4,那就更容易了,因为DebugRelease版本定义并取消定义DEBUG,所以你不必这样做。

比评论和取消注释代码行要容易得多。

答案 5 :(得分:4)

#ifdef RELEASE
   #define NSLog(...) do { } while (0)
#endif

是我到目前为止找到的最佳方式。

答案 6 :(得分:3)

#define NSLog(...)

将此行添加到.pch文件

如果你想要日志而不是评论它

答案 7 :(得分:2)

您可以在单个查找和替换操作中执行此操作。您可以执行此简单的正则表达式替换。它处理注释(//)和非注释行。即使前面的注释行有两个以上的正斜杠(比如///)而不是rwo,这也可以工作。您可以参考this link。执行以下步骤。

  1. 选择编辑&gt;查找&gt;在工作区中查找和替换
  2. 样式 =&gt; 正则表达式
  3. 查找字段中输入(/)*(NSLog.*)
  4. 执行查找操作。
  5. 替换字段中输入//\2
  6. 执行替换操作。
  7. 享受正则表达式的美丽; - )

答案 8 :(得分:2)

我会这样做

#define EnableNSLog 1

#if EnableNSLog == 0
#define NSLog   //
#elif EnableNSLog == 1
#warning Disable NSLog
#endif

这应该会生成一条警告消息,提醒我在最终发布前禁用NSLog

答案 9 :(得分:1)

菜单栏中的

:编辑&gt;查找&gt;在工作区中查找和替换 然后,显示使用正则表达式的选项。 搜索/替换“[^ /] NSLog”

答案 10 :(得分:1)

右键单击xcode中的NSLog语句,然后选择“在项目中查找”作为文本。您将被提示进入一个新窗口,您可以按照Mihai Fratu提供的指导。

TNQ

答案 11 :(得分:1)

如何在生产阶段的Xcode中禁用NSLog

在项目的“支持文件”文件夹中的#define NSLog文件中添加appName-Prefix.pch 和结果文件代码看起来像......

// Prefix header for all source files of the 'NSLog' target in the 'NSLog' project
//

#import <Availability.h>

#ifndef __IPHONE_4_0
#warning "This project uses features only available in iOS SDK 4.0 and later."
#endif

#ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
#endif

//Add this to disable NSLog
#define NSLog //

答案 12 :(得分:0)

您可以使用以下预处理器指令,它不会使用发布模式。 所以你不必评论NSLog()。

#ifdef DEBUG
    NSLog(@"YOUR MESSAGE HERE!");
#endif

答案 13 :(得分:0)

也试试这个:

    #define NSLog(@"YOUR MESSAGE HERE!") do { } while (0)

答案 14 :(得分:-1)

将以下行添加到.pch文件

#define NSLog

启用评论