Нет, вы не можете этого сделать. Это, на самом деле, «высоко динамичная» природа Obj-C, которая делает его довольно плохой идеей; Представьте себе:
id objectOfSomeType = [foo methodReturningId]; //It's not clear what class this is
[Test test:objectOfSomeType]; //Which method is called? I dunno! It's confusing.
Если вы действительно, действительно хотите такое поведение, я полагаю , вы могли бы реализовать это так:
- (void)test:(id)fooBar
{
if ([fooBar isKindOfClass:[Foo class]])
{
//Stuff
}
else if ([fooBar isKindOfClass:[Bar class]])
{
//You get the point
}
}
Во всех случаях, которые я могу себе представить, однако наиболее целесообразно использовать метод инварианта:
- (void)testWithFoo:(Foo *)foo;
- (void)testWithBar:(Bar *)bar;