这是我的代码。
#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()?
因为状态是一个未分配的静态变量,编译器自动找到一个初始化它的方法?
答案 0 :(得分:2)
只要将静态类添加到运行时,就会调用load函数,因此发生在您身上的是正常行为,如果您想要调用函数,请将其命名为
每当将类或类别添加到Objective-C时调用 运行;实现此方法以执行特定于类的行为 负荷。