哪种方式最适合用于键值编码?让我们假设 MyController 类具有变量 myVariable 。有人可以写一些好的,哪些是坏的,为什么。
// Method in the MyController class.
- (NSString*)myVariableKVC {
return NSStringFromSelector(@selector(myVariable));
}
[myController addObserver:self
forKeyPath:[myController myVariableKVC]
options:NSKeyValueObservingOptionNew
context:nil];
[myController addObserver:self
forKeyPath:@"myVariable"
options:NSKeyValueObservingOptionNew
context:nil];
从我的观点来看,第一部分更好。我们没有硬编码字符串,当我们使用 Refactor - >重命名时重命名...... 然后重命名。
答案 0 :(得分:3)
如果您有一个名为-Wundeclared-selector
(Xcode名称:“Undeclared Selector”,Xcode构建设置:GCC_WARN_UNDECLARED_SELECTOR
)的警告,第一种方法会在编辑时向您发出一些警告,如果您更改了选择器的名称(对于未在任何地方声明为选择器的东西),正如您所指出的,这会略微减少硬编码/“魔术”字符串。我不打算为它做一个单独的方法,我只是这样做:
[myController addObserver:self
forKeyPath:NSStringFromSelector(@selector(myVariable))
options:NSKeyValueObservingOptionNew
context:nil];
默认情况下,在我查看的Xcode项目模板中,此警告不,因此如果您需要进行此项检查,则需要手动为项目启用该警告。
没有该警告,没有区别,除了第一种方法引发另一个函数调用(并且在具有返回问题中出现的选择器的ObjC方法的情况下发送ObjC消息)。我觉得这个警告默认情况下是这样的,但是事情发生了变化,我想。