gpt4 book ai didi

ios - NSUserDefault setObject 的现代 objective-c 语法是什么?

转载 作者:行者123 更新时间:2023-11-28 18:01:00 25 4
gpt4 key购买 nike

我刚刚向我的同事展示了我的代码,他提醒我使用现代的 objective c 语法。我觉得自己像个白痴,因为我不知道他的意思。我如何转换:

NSUserDefaults *rankDate = [NSUserDefaults standardUserDefaults];
[rankDate setObject:self.date forKey:@"rankDate"];
[rankDate setObject:[NSNumber numberWithInteger:self.date.people] forKey:@"people"];
[rankDate synchronize];

进入“现代 Objective-C 语法”?

我多年来一直这样做,但从未听说过这种语法。我应该担心吗?

最佳答案

既然它出现在评论中,我想我会继续将它提升为一个答案,这样它就不会丢失。这里更好的代码是:

NSUserDefaults *ud = [NSUserDefaults standardUserDefaults];
[ud setObject:self.date forKey:@"rankDate"];
[ud setInteger:self.date.people forKey:@"people"];

我做了一些改变。首先,rankDate 作为standardUserDefaults 的名称毫无意义,而且非常具有误导性。其次,它使用 setInteger:forKey: 而不是乱用 NSNumber 包装器。没有那个必要。最后,它摆脱了 synchronize。这很少能达到您真正的意思,尤其是在 iOS 上(it just waits)。

也就是说,整个对象模型非常困惑。似乎“date”不是日期,“people”不是人,而且你将相同的数据保存了两次。但这是一个单独的问题。最主要的是这里没有正确应用“现代 Objective-C”。您不应该使用 NSNumber(即 @(...)),并且 NSUserDefaults 上没有下标(即 ud [@"..."]).

(setInteger:forKey:NSUserDefaults 上的所有其他特定 set 方法的存在我相信解释了为什么它没有下标。这将是特殊情况的对象,这会使代码不一致并鼓励 NSNumber 在不需要时换行。)

关于ios - NSUserDefault setObject 的现代 objective-c 语法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34651699/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com