2015-12-11 43 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數據到磁盤(即寫入文件的地方。)如果你想有類似的行爲,您還需要保存數據後,到一個文件並在啓動時讀取該文件。