Objective c KVC使用哪种方法?

Objective c KVC使用哪种方法?,objective-c,Objective C,对于键值编码,哪种方法更好?让我们假设MyController类具有variablemyVariable。有人能写出好的意见,坏的意见,为什么 1. 2. 在我看来,第一部分更好。我们没有硬编码字符串,当我们使用重构->重命名…进行重命名时,它将被重命名。如果您启用了名为-Wundeclared选择器的警告(Xcode name:“Undeclared selector”,Xcode构建设置:GCC\u WARN\u Undeclared\u selector),第一种方法是,如果您更改选择器的

对于键值编码,哪种方法更好?让我们假设MyController类具有variablemyVariable。有人能写出好的意见,坏的意见,为什么

1. 2.
在我看来,第一部分更好。我们没有硬编码字符串,当我们使用重构->重命名…进行重命名时,它将被重命名。

如果您启用了名为
-Wundeclared选择器的警告(Xcode name:“Undeclared selector”,Xcode构建设置:
GCC\u WARN\u Undeclared\u selector
),第一种方法是,如果您更改选择器的名称(改为在任何地方都没有声明为选择器的名称),那么编译器会给您一些警告,正如您所指出的,这会略微减少硬编码的/“魔法”字符串。不过,我不想为它设置单独的方法,我只是这样做:

[myController addObserver:self
               forKeyPath:NSStringFromSelector(@selector(myVariable))
                  options:NSKeyValueObservingOptionNew
                  context:nil];
在我查看的Xcode项目模板中,默认情况下,此警告是未启用的,因此如果需要此检查,则需要为项目手动启用该警告


如果没有该警告,则没有区别,除了第一个方法会引发另一个函数调用(如果有一个ObjC方法返回问题中出现的选择器,则会发送ObjC消息)。我觉得这个警告在默认情况下是打开的,但我想情况会改变。

这实际上是不正确的。如果选择器名称中有输入错误,编译器将不会产生警告。它和使用硬编码的魔法字符串没什么不同。哦,嘿,你说得对。我觉得它是用来发出“未知选择器”警告的。。。也许我很困惑。哦,好吧。为后代编辑。如果你有严格的编译器警告(你应该这样做),如果选择器不存在,你会得到一个错误。刚才,我打开了“学究警告”和“严格选择器匹配”,但我仍然没有从
NSStringFromSelector(@selector(ajshjkhgwle))必须打开名为
-Wundeclared选择器的警告(Xcode名称:“Undeclared selector”,Xcode生成设置:
GCC\u WARN\u Undeclared\u selector
)。
[myController addObserver:self
               forKeyPath:@"myVariable"
                  options:NSKeyValueObservingOptionNew
                  context:nil];
[myController addObserver:self
               forKeyPath:NSStringFromSelector(@selector(myVariable))
                  options:NSKeyValueObservingOptionNew
                  context:nil];