我的項目使用ARC。 Instruments中的泄漏工具報告說NSUserDefaults initWithSuiteName:泄漏內存。NSUserDefaults initWithSuiteName在iOS 8中泄漏內存?
有沒有其他人注意到了這一點?
NSUserDefaults *theDefaults = [[NSUserDefaults alloc] initWithSuiteName:self.myGroupNameStr];
我的項目使用ARC。 Instruments中的泄漏工具報告說NSUserDefaults initWithSuiteName:泄漏內存。NSUserDefaults initWithSuiteName在iOS 8中泄漏內存?
有沒有其他人注意到了這一點?
NSUserDefaults *theDefaults = [[NSUserDefaults alloc] initWithSuiteName:self.myGroupNameStr];
OK,這似乎是我自己的問題。
與[NSUserDefaults standardUserDefaults]
不同,我自己的代碼必須假設保留所有權[[NSUserDefaults alloc] initWithSuiteName:@"group.com.company.app"]
。
因此,修復的方法是在我的UIInputViewController
加載時初始化self.myDefaults,然後在我的UIInputViewController
的dealloc中刪除self.myDefaults
。
你能解釋爲什麼我們應該保留這個對象的所有權嗎?它應該與ARC下的任何其他對象一樣自動管理。也許我錯過了一些東西,這看起來像一個系統bug ... – 2015-06-10 12:39:37
// 嘗試這種方式 .//
[[NSUserDefaults standardUserDefaults] setObject:AppDel.arrQueueForOffline forKey:@"Queued_Process"];
[[NSUserDefaults standardUserDefaults] synchronize];
OP顯式說明了initWithSuiteName,而不是standardUserDefaults。 initWithSuiteName是使用用戶默認值與新的iOS 8擴展共享數據的唯一方式。使用standardUserDefaults如果可能不可能。 – Edgar 2014-12-19 10:28:34
創建一個NSUserDefaults的單sharedManager,併爲應用程序循環一次初始化對象
+ (NSUserDefaults *)groupUserDefaults
{
static NSUserDefaults *sharedGroupUserDefaults = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedGroupUserDefaults = [[self alloc] initWithSuiteName:@"group.company.appName"];
});
return sharedGroupUserDefaults;
}
我認爲,這個解決方案看起來很標準。如果它是單身人士,它可以以統一的方式跨所有班級進行訪問。無需再次編寫用於「NSUserDefaults」創建的代碼。 – 2016-01-11 13:52:23
你可以添加任何代碼或屏幕截圖? – 2014-12-18 23:33:25