Эквивалентны ли следующие две строки?
1.
[[NSUserDefaults standardUserDefaults] removeObjectForKey:@"example key"]
2.
[[NSUserDefaults standardUserDefaults] setObject:nil forKey:@"example key"]
nsuserdefaults
ma11hew28
источник
источник
Ответы:
Swift 3.0
Приведенный ниже ответ больше не соответствует действительности, когда я это тестировал. При установке
nil
на результат сохраняется NSCFData. Возможно, ссылка на объект NSNull, но я не уверен.Чтобы полностью удалить значение для ключа, используйте
UserDefaults.standard.removeObject(forKey: "YourDefault")
Я тестировал следующий код:
источник
Да, обе строки кода эквивалентны, обе приведут к чтению nil
NSUserDefaults
вернет nil, если ключ не был найден. Я бы рекомендовал использоватьremoveObjectForKey
вместо значения nil.вот как проверить, если установка значения ключа на nil удаляет ключевую запись из
NSUserDefaults standardUserDefaults
.или просто выгрузите словарь ключей / значений
NSUserDefaults standardUserDefaults
источник
removeObjectForKey
?setObject:nil
также будет удален объект, а не только его ключ. Итак, обе функции приводят к одинаковому результату. Кроме того, если вы удалите (или установите значение nil) единственный сохраненный объект (и ключ), весь файл .plist будет удален.Swift 5.0 + iOS 11 и выше
Оба метода удаляют значение. Пробовал это на детской площадке:
Перед прошивкой 11 это приведет в сериализации
nil
вData
и выдаст ошибку.источник