0

一度だけ初期化する必要があり、最初に計算された値を返すクラスが必要です。正しいアプローチの下にありますか?

@property (nonatomic, retain) NSString *userAgent;

@implementation UserAgent
@synthesize userAgent = _userAgent;


+ (NSString *) userAgentString
{
    UserAgent *thisClass;
    if(self == nil)
    {
        thisClass = [[UserAgent alloc] init];
    }

    if (thisClass.userAgent == nil)
    {
        return @"not initialized";
    }

    return thisClass.userAgent;
}
4

3 に答える 3

3

いいえ。

  1. thisClassローカル変数です。これは、が呼び出されるたびに値が(ガベージに)リセットされることを意味します+userAgentString。少なくともそれを作りなさいstatic

  2. selfの意味は、クラスメソッド内で期待するものではありません。どういう意味thisClassですか?

  3. 上記の修正を行っても、このメソッドはスレッドセーフではないため、問題がない場合もあります。

ObjectiveCではGCDのdispatch_onceを使用してシングルトンを作成し、iOS5ではシングルトンを作成するを参照てください。シングルトンを適切に構築するための例として。

于 2012-05-01T18:08:01.820 に答える
0

いくつかの変更。まず、thisClass静的である必要があります。次に、self静的メソッドにポインターがないため、そこで使用する必要がthisClassあります。そのようです:

+ (NSString *) userAgentString
{
    static UserAgent *thisClass;
    if(thisClass == nil)
    {
        thisClass = [[UserAgent alloc] init];
    }

    if (thisClass.userAgent == nil)
    {
        return @"not initialized";
    }

    return thisClass.userAgent;
}

また、コメンターが述べているように、より良いアプローチはシングルトンを使用することかもしれません。

于 2012-05-01T18:07:33.387 に答える
0

http://www.galloway.me.uk/tutorials/singleton-classes/

これはうまくいきました..ありがとう@Inafziger

于 2012-05-01T18:16:27.860 に答える