我对如何有效使用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子句都在执行。
答案 0 :(得分:1)
您想要达到的目标不是singleton
所做的。
singleton
是一个对象,在应用程序运行时只有一个实例。如果您连续10次致电[MyManager sharedManager]
,那么您每次都会获得相同的地址。
退出应用程序后,与其他任何对象一样,singleton
将被销毁。下次启动应用程序时,您将创建一个全新的singleton
,而不会创建任何旧数据。
NSUserDefaults
即使在退出并重新启动应用程序之后也能够记住数据,因为它是persisting
数据到磁盘(即在某处写入文件)。如果你想有类似的行为,你可以&# 39; ll还需要将数据保存到文件中并在启动时读取该文件。