2012-04-17 5 views
3

グローバルスタティックを探し始めると、アプリケーション全体で使用する色を1か所に設定できます。私はここでシングルトンについての非常に良い回答(古い)を理解できませんでしたので、これを非常に簡単に処理するクラスを作成しました。いくつかの(他のスレッドの)いくつかに基づいて、私はアプリケーションデリゲートを避けることに決めました。シングルトンまたはセパレートクラス - 長所と短所

これを処理するにはいくつかの方法があるようです。低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 

後に色を使用するには、次の

// 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.backgroundColor = [[[Global alloc] initWithColor:@"greenbackground"] myColor]; 

編集を

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

答えて

1

よく、お電話allocinitあなたのカラープロパティをグローバルに使用したい場合は、常に無駄です。これはシングルトンが助けになる場所です(ONE(alloc + init)のみ作成し、コード内の任意の場所で使用します)。

allocは、myColorを読み込むたびに呼び出されます。このコードは、コード全体で使用することを考えると無駄です。それを指摘して

cell.backgroundColor = [[Global sharedInstance] myColor]; 
+0

ありがとう:

これは非常にきれいに見えます。そのアイデアは私を過ぎ去った。私はシングルトンをもう一度見ます。 – David

+0

あなたに助けが必要な場合は、私に知らせてください。 – giorashc

+0

提供していただきありがとうございます。私は確かにできる。 [このページで](http://stackoverflow.com/questions/338734/iphone-proper-usage-of-application-delegate)MyCommonクラスのコードは、十分に使いやすく便利です。しかし、Xcodeは私が解決できないいくつかのエラーを投げます。ちなみに、私はGlobalという名前の単純なクラスのNSObjectを作成し、一致させるコードを変更(名前を変更)しました。コードを見たい場合は、ここに表示する方法をお勧めします。私はユーザーの代わりにカラーイーバールを使用することを考えています。 (?) – David

関連する問題