Selectors are used to obtain the method implementation of an object.
For example, almost every object implements the description method even if it inherits the implementation from its superclass. A function pointer can only point to one particular implementation of description (e.g. it can only point to NSString's version, or NSNumber's version, but not both). You can't take the function pointer of one class's description implementation and use it for every class, but you can use the same description selector, and it doesn't matter what object you use as the target, the right method implementation will always be used.