我只是向我的同事展示了我的代码,他提醒我使用现代的客观c语法.我觉得自己像个白痴,因为我不知道他的意思.我怎样才能转换:
NSUserDefaults *rankDate = [NSUserDefaults standardUserDefaults]; [rankDate setObject:self.date forKey:@"rankDate"]; [rankDate setObject:[NSNumber numberWithInteger:self.date.people] forKey:@"people"]; [rankDate synchronize];
进入"现代客观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上(它等待).
也就是说,整个对象模型令人难以置信的混乱.似乎"日期"不是日期,"人"不是人,而是两次保存相同的数据.但这是一个单独的问题.最重要的是,这里没有适当的"现代Objective-C"应用.你不应该使用NSNumber
(即@(...)
),并且没有下标NSUserDefaults
(即ud[@"..."]
).
(我相信存在setInteger:forKey:
和所有其他特定set
方法都NSUserDefaults
解释了为什么它没有下标.这就是特殊情况对象,它会使代码不一致并鼓励NSNumber
在不需要时进行包装.)