2015-12-11 28 views
0

我很困惑如何有效地使用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

当然是了。单身人士只会在应用程序运行时持续。 'NSUserDefaults'没有什么不同。如果您希望数据在应用程序运行中存活,则需要从文件或其他存储中持久保存和恢复数据。 – rmaddy

回答

1

你想达到的不是什么singleton

A singleton是在您的应用程序运行时只有一个实例的对象。如果您连续拨打[MyManager sharedManager] 10次,则每次都会收到相同的地址。

一旦你退出应用程序,就像其他任何对象一样,singleton被销毁。下一次启动应用程序时,您将得到一个全新的singleton,其中不包含任何旧数据。

NSUserDefaults能够记住数据,即使退出并重新启动应用程序,因为它是persisting数据到磁盘(即写入文件的地方。)如果你想有类似的行为,您还需要保存数据后,到一个文件并在启动时读取该文件。