でセレクターの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
なりid
ますMyObject
。
一方、コンパイラは文句を言わずid
、具体的なオブジェクト参照の両方が、深いところにある単なるポインターのように見え、お互いに簡単にキャストできます。繰り返しますが、Objective C コンパイラが文句を言わない多くのファウルがあります。
本当の問題は、それは安全か?ということです。語学弁護士歓迎。