将变量设置为x,除了在类中,它是y

时间:2013-04-16 15:09:19

标签: objective-c

我想在我的所有类中定义和设置值x,除了在给定的类中。

因此,我已添加到文件MyApp-Prefix.pch

int ddLogLevel = LOG_LEVEL_VERBOSE;

现在,在给定的类中,我想要更改此变量。 我该怎么办 ?我应该把新命令放在哪里?在.m?在@implementation之前?有/无const和/或static和/或type ??


PS:如你所见,我对extern / const事情一无所知。如果有人知道一个好的和明确的参考,对于一个不懂C的新手,我会接受它!

1 个答案:

答案 0 :(得分:2)

我认为ddLogLevel是日志系统cocoalumberjack的日志级别。而不是“覆盖”你的类(没有这样的东西,因为它是一个全局变量),你应该做他们所谓的Fine Grained Logging。也就是说,使用位掩码中的下一位定义日志,然后将全局常量设置为包含或排除标志的掩码的按位组合。它在链接页面上进一步说明。例如:

添加这些定义

#define LOG_FLAG_FOOD_TIMER    (1 << 4)  // 0...0010000
#define LOG_FOOD_TIMER  (ddLogLevel & LOG_FLAG_FOOD_TIMER)
#define DDLogFoodTimer(frmt, ...)   ASYNC_LOG_OBJC_MAYBE(ddLogLevel, LOG_FLAG_FOOD_TIMER,  0, frmt, ##__VA_ARGS__)

然后在你的类中使用这个宏作为日志语句:

DDLogFoodTimer(@"blah");

并将全局设置为:

static const int ddLogLevel = LOG_LEVEL_WARN | LOG_FLAG_FOOD_TIMER;

在C和Objective-C中, const 关键字创建一个只读变量。关键字const apply适用于其左侧的任何内容。如果它的左边没有任何东西,它适用于它右边的任何东西。例如:

// a modifiable pointer to a constant integer (its value can't be modified). 
const int * i;

// Constant pointer to constant integer. 
const int const * i;

extern 表示变量在别处定义。定义这样的全局变量是常见的风格:

// header file (outside the class definition)
extern NSString* PREFS_MY_CONSTANT;

// implementation file (outside the class definition)
NSString* PREFS_MY_CONSTANT = @"prefs_my_constant";