1

我在我的项目中使用 MagicalRecord + CocoaLumberjack。MagicalddLogLevel记录通过以下方式声明(调试/日志记录级别):

extern int ddLogLevel

所以这意味着我必须稍后自己声明这个变量,我这样做了。

现在,查看 Lumberjack 的文档 ( https://github.com/robbiehanson/CocoaLumberjack/wiki/DynamicLogLevels ),我想将此变量声明为静态,以便我可以动态更改类级别的调试级别。如果我ddLogLevel在编译器中声明为静态 intAddDelegate抱怨(静态声明遵循非静态声明),这是有道理的,但我应该如何将其声明为静态?

我能够使它工作的唯一方法是将ddLogLevelin声明AppDelegate为常规int,然后在我想要具有不同日志级别的类中再次声明变量,但仅在我的界面中:

@interface MyClass () {
    int ddLogLevel;
}

这行得通,但如果我可以声明ddLogLevel为静态会很棒......是否有一个特定的地方我可以将它声明为静态并通过不必每次我想动态更改调试级别时都声明它来简化我的调试?

4

3 回答 3

2

在文件范围内(在任何类之外)精确定义ddLogLevel您的 、 或 文件之一.m.c就像.mm这样:

int ddLogLevel = 0;

要为其分配新值,请使用以下内容(在函数内部):

ddLogLevel = 2;

不要担心“静态”;在尝试任何花哨的东西之前先了解基础知识。

于 2013-08-27T05:45:58.077 回答
0

正确的做法是将变量声明为static,而不是声明为extern。我在.pch文件中执行此操作并添加一个编译指示来抑制警告:

#ifdef __OBJC__
    #import <Cocoa/Cocoa.h>
    // ...
    static int ddLogLevel = LOG_LEVEL_WARN;
    #pragma unused(ddLogLevel)
#endif

然后,正如@Quuxplusone 所建议的,我可以为其分配一个新值:

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    ddLogLevel = LOG_LEVEL_VERBOSE;
    // ...
}
于 2014-05-20T15:26:21.660 回答
0

为了启用动态更改,ddLogLevel我使用以下方法:

在一个头文件 ( .h) 中,我在范围extern DDLogLevel ddLogLevel;之外定义了@interface。在实现文件 ( .m) 中,我在范围之外再次定义DDLogLevel ddLogLevel;了没有extern关键字@implementation。感谢这一点,我可以在ddLogLevel任何地方动态更改或设置。

于 2016-01-06T10:55:37.937 回答