当您使用 检索选择器的 ID 时,选择@selector()
器值是否因参数类型而异?
这就是我的意思。我有一个接受对象引用和选择器的方法,然后使用参数调用它:
-(void)CallLater:(NSObject*) Obj Sel: (SEL)Sel
{
//Some stuff, then:
[Obj performSelector: Sel withObject: SomeOtherObject];
}
我将此方法与一个选择器一起使用到一个函数,该函数接受一个类型化的对象引用,而不是id
:
-(void)MyMethod: (MyObject*) a
{
}
[self CallLater: self Sel:@selector(MyMethod:)];
它似乎有效,但我的感觉正在刺痛。在像 C# 这样的静态类型语言中,这将是一种犯规,一种向上转型 -CallLater
期望一个选择器用于一个接受 a 的函数,id
而我给它一个接受 a 的函数MyObject
。
另一方面,编译器并没有抱怨,id
而且具体的对象引用似乎都只是深层的指针,可以简单地相互转换。话又说回来,Objective C 编译器没有抱怨很多错误。
所以真正的问题是——它安全吗?欢迎语言律师。