在不同的类中创建和访问“debugMode”变量

时间:2015-03-02 13:55:32

标签: objective-c class variables

我正在尝试创建一个布尔变量debugMode,并在几个不同的类中访问它。这样我可以在我的ViewController中设置它的值一次,并且能够在我的不同类(SKScene的子类)中访问它以显示帧速率,日志物理值等。

我读过我需要创建一个类的实例?我不知道这个程序是如何适用的。

我是objective-c的新手,非常感谢任何帮助!谢谢!

2 个答案:

答案 0 :(得分:1)

默认解决方案是预处理器定义,默认情况下在xcode项目中设置。

所以,在源代码中你可以放

#ifdef DEBUG
// code that should only run in Debug Configuration
#endif

答案 1 :(得分:-2)

因此,如果我说得对,你想要一个给定类的实例,你可以在整个应用程序中使用它而不会丢失类的状态,但这应该只存在于代码的DEBUG版本中?

好的,我们可以使用与#ifdef DEBUG混合的Singleton Pattern来确定是否处于调试模式。

<强> DebugManager.h

// Our Debug Class that we have just made up.
// Singleton class
@interface DebugManager : NSObject

// Some properties that we want on the class
@property (nonatomic, strong) NSString *debugName;
@property (nonatomic, readonly) NSDate *instanceCreatedOn;

// a method for us to get the shared instance of our class
+ (id)sharedDebugManager;

@end

<强> DebugManager.m

#import "DebugManager.h"

@implementation DebugManager

// Create a shared instance of our class unless one exists already
+ (id)sharedDebugManager
{
    static DebugManager *sharedDebugManager = nil;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        sharedDebugManager = [[self alloc] init];
    }); 

    return sharedDebugManager;
}

- (id)init
{
    if (self = [super init]) {
        debugName = @"Debug Instance";
        instanceCreatedOn = [NSDate new];
    }

    return self;
}

@end

现在我们有一个Singleton类设置,我们可以在*-Prefix.pch添加以下行,这将为我们提供一个我们可以在整个应用程序中使用的DebugManager类的实例。

#ifdef DEBUG
    DebugManager *manager = [DebugManager sharedDebugManager];
#endif

请记住,当您想要使用manager实例时,需要将其包含在#ifdef DEBUG中,因为在生产中运行时,将不会再看到manager的实例。所以一定要确保:

#ifdef DEBUG
     NSLog(@"The DebugManagers instance name is %@", [manager debugName]);
#endif

请勿忘记在Build Settings关注this答案下的xcode中添加预处理器宏,以了解如何操作

如果您有任何问题,请在下面提问。