0

まず、私は Lua 出身です。私がグローバル変数志向であることを責めないでください (笑)。それで、私はこの「シングルトンシステム」全体の使用方法について読んでいますが、ポイントを完全に見逃しているのか、それとも単に間違って実装しているだけなのかわかりません。

私のコードの目標は、複数のファイルが特定のファイルの配列のサイズを保持する変数にアクセスする方法を作成することです。ここに私のシングルトンがあります:

.h

#import <Foundation/Foundation.h>

@interface GlobalVariables : NSObject
{
    NSNumber *currentGameArrayCount;
    BOOL *isGamePaused;
}

@property (nonatomic, readwrite) NSNumber *currentGameArrayCount;
@property (nonatomic, readwrite) BOOL *isGamePaused;

+ (GlobalVariables *)sharedInstance;


@end

.m

#import "GlobalVariables.h"

@implementation GlobalVariables
@synthesize currentGameArrayCount, isGamePaused;

static GlobalVariables *gVariable;

+ (GlobalVariables *)sharedInstance
{


    if (gVariable == nil) {
        gVariable = [[super allocWithZone:NULL] init];
    }

    return gVariable;
}

- (id)init
{
    self = [super init];
    if (self)
    {
        currentGameArrayCount = [[NSNumber alloc] initWithInt:0];
        isGamePaused = NO;

    }

    return self;
}

@end

そして、私が使用する配列を持つ別のファイルで:

GlobalVariables *sharedData = [GlobalVariables sharedInstance];
        NSNumber *tmpArrayCount = [sharedData currentGameArrayCount];

        NSInteger tmpCount = [whereStuffActuallyHappens.subviews count]; // Subviews is the array
        NSNumber *currentCount = [NSNumber numberWithInteger:tmpCount];


        tmpArrayCount = currentCount;

このコードの目的は、singeton で変数を取得し ( currentGameArrayCount)、現在の配列カウントを設定することでした ( currentCount)。シングルトンの目的を間違って解釈していますか? 私はシングルトンが苦手で、正しくセットアップしていませんか? 配列カウントをすべてのファイルにアクセスできるようにする結果をどのように達成できるか知っている人はいますか?

4

1 に答える 1

1

いくつか問題があります。これらの変更を試してください:

GlobalVariables.h:

#import <Foundation/Foundation.h>

@interface GlobalVariables : NSObject

@property (nonatomic, assign) int currentGameArrayCount;
@property (nonatomic, assign) BOOL gamePaused;

+ (GlobalVariables *)sharedInstance;

@end

GlobalVariables.m:

#import "GlobalVariables.h"

static GlobalVariables *gVariable = nil;

@implementation GlobalVariables

+ (GlobalVariables *)sharedInstance {
    if (gVariable == nil) {
        gVariable = [[self alloc] init];
    }

    return gVariable;
}

- (id)init {
    self = [super init];
    if (self) {
        self.currentGameArrayCount = 0;
        self.gamePaused = NO;
    }

    return self;
}

@end

他のコードでは、次のことができます。

GlobalVariables *sharedData = [GlobalVariables sharedInstance];
int tmpArrayCount = sharedData.currentGameArrayCount;

NSInteger tmpCount = [whereStuffActuallyHappens.subviews count]; // Subviews is the array
sharedData.currentGameArrayCount = tmpCount;
于 2013-03-20T04:53:18.583 に答える