如何防止日志消息 "skipping setting already-present value for key"

How to prevent log message "skipping setting already-present value for key"

NSUserDefaults 中存储值时:

[[NSUserDefaults standardUserDefaults] setValue:myValue forKey:@"myKey"];

...如果值已经存在,Xcode 8 将记录:

2016-07-14 09:59:04.081806 MyAppName[52232:2561291] [User Defaults] CFPrefsPlistSource<0x7941d950> (Domain: com.myAppBundle, User: kCFPreferencesCurrentUser, ByHost: No, Container: (null)) skipping setting already-present value for key myKey

1) 我可以要求 Xcode 不记录这个吗? [主要问题]

2) 或者我应该在使用 setValue:forKey: 之前比较先前存储的值是否相等? [补充问题]

示例:

if (![[NSUserDefaults standardUserDefaults] valueForKey:@"myKey"] isEqual:myValue])
    [NSUserDefaults standardUserDefaults] setValue:myValue forKey:@"myKey"];

3) 或者我应该使用线程安全锁执行此比较,以避免在我比较的指令和我使用 setValue:forKey: 的指令之间存储两次相同的值? [补充问题]

示例:

@synchronized ([NSUserDefaults standardUserDefaults]) {
    if (![[NSUserDefaults standardUserDefaults] valueForKey:@"myKey"] isEqual:myValue])
        [NSUserDefaults standardUserDefaults] setValue:myValue forKey:@"myKey"];
}

问题仅出现在 Beta 1 和 Beta 2 中。已修复 Xcode 8 beta 3:

When debugging applications in the Simulator, the OS will not produce an excessive amount of unhelpful logging. (26652255)

此外,可以通过编辑每个方案并添加特定环境变量 OS_ACTIVITY_MODEdisable 来删除更多日志记录: