One difference is respondsToSelector can't tell you if an instance inherits a method from its superclass, so if you want to do something like [super respondsToSelector:_cmd]; it wont work, you need to to [[self superclass] instancesRespondToSelector:_cmd];