3

在 Objective-C 中,至少有两种方法可以获取(或创建?因此是问题)选择器:@selector(foo:bar:)NSSelectorFromString(@"foo:bar:"). 但是选择器的生命周期是多少?

由于选择器(至少)知道它们的名字,它们不太可能是固定大小的可复制值,可以在程序中随机播放。这意味着有人需要分配并可能取消分配它们。Cocoa 框架中的大多数对象都具有保留-释放语义,这使得它们的所有权明确并且相对容易跟踪。但是,我没有看到选择器所有权的明确概念。

我希望使用第一种语法获得的选择器在程序的整个生命周期中都作为全局变量存在(如文字字符串),但是另一个呢?如果我创建/获取一个选择器NSSelectorFromString(@"foo:bar:"),它在我的程序的整个生命周期中也有效吗?

4

2 回答 2

6

是“获得”,而不是“创造”。两者都只是检索由运行时系统创建和拥有的选择器。因此SEL, 的寿命实际上是不朽的。

如果您想自己创建选择器,则需要使用运行时函数sel_registerName()NSSelectorFromString()如果您向它传递一个运行时还不知道的名称,则使用此函数。

于 2012-10-29T00:23:08.513 回答
4

根据 Apple 的文档,选择器在全球范围内注册并且永远存在。如果您传递一个新的或未知的选择器名称,NSSelectorFromString它将被注册为一个新的选择器。

于 2012-10-29T00:24:41.383 回答