-1

これは私のコードです。

#import "States.h" 

@interface States ()
+ (NSString *)statesFilePath;
@end

static NSMutableDictionary *states = nil;

@implementation States
+ (NSString *)statesFilePath
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *statesFilePath = [[paths objectAtIndex:0] stringByAppendingPathComponent:gStatesFile];
    return statesFilePath;
}

+ (void)load
{   
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    [states release];
    NSString *filePath = [[States statesFilePath] retain];
    if ([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
        states = [[NSMutableDictionary alloc] initWithContentsOfFile:filePath];
    } else {
        states = [[NSMutableDictionary dictionaryWithObject:[NSNumber numberWithInt:0] forKey:@"ID"] retain];
    }
    [filePath release];
    [pool release];
}

静的なバリアントに状態を保存するのは良い考えではありませんでした。

しかし、私の質問は、アプリが起動するたびに load() が自動実行されるのはなぜですか?

状態が割り当てられていない静的バリアントであるため、コンパイラは自動的にそれを初期化する方法を見つけますか?

4

1 に答える 1

2

ロード関数は、静的クラスがランタイムに追加されるたびに呼び出されるため、関数が呼び出されないようにする場合は、通常の動作です。別の名前を付けてください。

アップルドキュメントから

クラスまたはカテゴリが Objective-C ランタイムに追加されるたびに呼び出されます。このメソッドを実装して、ロード時にクラス固有の動作を実行します。

于 2012-06-25T07:15:57.150 に答える