我对如何有效使用singleton
感到困惑。我希望我的singleton
类表现得像[NSUserDefaults standardUserDefaults]
。但是我观察到的是每次创建新对象时,每次都看到一个不同的内存地址。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
MyManager *sharedManager = [MyManager sharedManager];
if(sharedManager.name.length==0) {
sharedManager.name = @"manager";
}
return YES;
}
+ (id)sharedManager {
static MyManager *sharedMyManager = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedMyManager = [[self alloc] init];
});
return sharedMyManager;}
每次启动时,if子句都会执行。
最佳答案
您要实现的不是singleton
要做的。singleton
是一个对象,在您的应用程序运行时,该实例只有一个实例。如果您连续拨打10次[MyManager sharedManager]
,则每次都会获得相同的地址。
退出应用程序后,就像其他任何对象一样,singleton
被销毁。下次启动该应用程序时,将创建一个没有任何旧数据的全新singleton
。NSUserDefaults
甚至可以在退出并重新启动应用程序后记住数据,因为persisting
就是将数据保存到磁盘上(即,在某个位置写入文件。)如果您希望具有类似的行为,则还需要保存数据到文件,并在启动时读取该文件。