我的项目使用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