これは私のコードです。
#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() が自動実行されるのはなぜですか?
状態が割り当てられていない静的バリアントであるため、コンパイラは自動的にそれを初期化する方法を見つけますか?