3

アプリ全体で使用される 1 つの場所に色を設定するために、グローバルな静的を探し始めました。ここSOのシングルトンに関するいくつかの非常に良い答え(古い)を理解できなかったので、これを非常に簡単に処理するクラスを作成しました。(他のスレッドの) いくつかに基づいて、アプリのデリゲートを避けることにしました。

これを処理するにはいくつかの方法があるようです。経験の浅い ios/objective-c 開発者として、以下の方法では何が欠けていますか? (ちなみに、それは機能し、シンプルに見えます。)

// Global.h
@interface Global : NSObject

@property (strong, nonatomic) UIColor *myColor;

- (id)initWithColor:(NSString *)color;

// Global.m
@implementation Global

@synthesize myColor;

- (id)initWithColor:(NSString *)color
{
    if (!self) {
        self = [super init];
    }

    if ([color isEqualToString:@"greenbackground"])
        myColor = [[UIColor alloc] initWithRed:0.0 / 255 green:204.0 / 255 blue:51.0 / 204 alpha:1.0];
    ... and so on with other colors
    return self;
}
@end

後で色を使用するには:

cell.backgroundColor = [[[Global alloc] initWithColor:@"greenbackground"] myColor];

より良い解決策のために編集:

// Global.h

#import <foundation/Foundation.h>

@interface Global : NSObject {
    UIColor *myGreen;
    UIColor *myRed;
}

@property (nonatomic, retain) UIColor *myGreen;
@property (nonatomic, retain) UIColor *myRed;

+ (id)sharedGlobal;

@end

// Global.m
#import "Global.h"

static Global *sharedMyGlobal = nil;

@implementation Global

@synthesize myGreen;
@synthesize myRed;

#pragma mark Singleton Methods
+ (id)sharedGlobal {
    @synchronized(self) {
        if (sharedMyGlobal == nil)
            sharedMyGlobal = [[self alloc] init];
    }
    return sharedMyGlobal;
}

- (id)init {
    if (self = [super init]) {
        myGreen = [[UIColor alloc] initWithRed:0.0 / 255 green:204.0 / 255 blue:51.0 / 204 alpha:1.0];
        myRed = [[UIColor alloc] initWithRed:204.0 / 255 green:51.0 / 255 blue:51.0 / 204 alpha:1.0];
    }
    return self;
}

@end

そして使用法:

cell.comboLabel.textColor = [[Global sharedGlobal] myGreen];
4

1 に答える 1

1

色のプロパティをグローバルに使用したい場合は、呼び出しallocとすべての時間が無駄です。initこれは、Singletons が役立つ場所です。シングルトンは一度だけ作成し ( alloc+ init)、コード内のどこでも使用できます。

あなたの場合、コード全体で使用することを考えるとalloc、読み取りたいたびに呼び出されますが、myColorこれは無駄です。

これははるかにきれいに見えます:

cell.backgroundColor = [[Global sharedInstance] myColor];
于 2012-04-17T16:57:10.550 に答える