На мой взгляд, оба предыдущих ответа неверны.Если вы используете
-[NSObject performSelector:withObject:];
, как предлагает Сикстен Отто, вы должны поместить это в начало вашего метода:
-(void)methodA:(id)stringOrNotification
{
if ([stringOrNotification isKindOfClass:[NSString class])
{
..do something..
}
if ([stringOrNotification isKindOfClass:[NSNotification class])
{
..do something else..
}
. . .
}
Помимо этого (плохого) подхода, что вы 'Запрашиваемая информация на самом деле (легко) не может быть выполнена в Objective-C, потому что язык не поддерживает параметрический полиморфизм.Другими словами, информация о типе не используется в отправке сообщения.Еще один способ сказать, что в одном классе не может быть «двух методов с одинаковым именем, но разными параметрами».На самом деле, я удивлен, что вы еще не видели ошибку компилятора, если пытались объявить это.
(Если у вас есть два метода, определенных в разных классах ,как и предполагает dreamlax, вызов сообщения будет работать тривиально, даже если вы не используете performSelector:
. Примерно так:
id eitherStringOrNotification;
[objectOfUncertainClass methodA:eitherStringOrNotification];
Если это то, что вы просите, у вас нетпроблема.)
Обратите внимание, что объект NSMethodSignature
содержит информацию о типах параметров, но она генерируется принимающим объектом, поэтому вы не можете использовать ее для разграничения сообщений на основе того, какие типы параметровпередаются (поскольку эта информация недоступна, когда создается экземпляр сигнатуры метода).