我读了一篇关于Selectors的Apple文档,其中说
当您希望代码发送一个在运行时可能不知道其名称的消息时,可以使用从字符串创建的选择器。
我读过“直到运行时才知道”和几个地方的类似短语 - 直到运行时我们才知道什么?如果我正在编码,对我隐藏什么,或者我不知道什么?
我对这个运行时概念感到困惑。
答案 0 :(得分:0)
运行时表示程序运行时的 。
相比之下, 运行时意味着Objective-C所依赖的库代码(基本上,所有函数都以{{开头) 1}},objc_
,class_
,object_
和protocol_
;即sel_
中定义的那些。
因此,文档告诉您,如果您遇到以下情况:配置文件或其他一些数据告诉您需要调用哪个选择器,然后您可以使用从字符串创建的选择器。
答案 1 :(得分:0)
这意味着您可以在运行时确定要运行哪个选择器:
- (void)first
{
}
- (void)second
{
}
- (void)third
{
}
- (void)runSelectorForNumber:(NSInteger)number
{
NSString *selectorName;
switch (number) {
case 1: selectorName = @"first"; break;
case 2: selectorName = @"second"; break;
case 3: selectorName = @"third"; break;
default: NSAssert(NO, @"Bad number!");
}
SEL selector = NSSelectorFromString(selectorName);
[self performSelector:selector withObject:nil afterDelay:0.0];
}
当然,在这个例子中你更有可能这样做:
SEL selector;
然后对每个案例做:
case 1: selector = @selector(first); break;
但是我想通过字符串来展示如何做到这一点,因为这就是您正在阅读的内容。