哪种方法可用于KVC?

时间:2013-02-22 12:03:44

标签: objective-c

哪种方式最适合用于键值编码?让我们假设 MyController 类具有变量 myVariable 。有人可以写一些好的,哪些是坏的,为什么。

1

// Method in the MyController class.
- (NSString*)myVariableKVC {
    return NSStringFromSelector(@selector(myVariable));
}

[myController addObserver:self
               forKeyPath:[myController myVariableKVC]
                  options:NSKeyValueObservingOptionNew
                  context:nil];

2

[myController addObserver:self
               forKeyPath:@"myVariable"
                  options:NSKeyValueObservingOptionNew
                  context:nil];

从我的观点来看,第一部分更好。我们没有硬编码字符串,当我们使用 Refactor - >重命名时重命名...... 然后重命名。

1 个答案:

答案 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消息)。我觉得这个警告默认情况下是这样的,但是事情发生了变化,我想。