objective-cselectordynamic-languagesmethod-dispatch

Using -performSelector: vs. just calling the method


I'm still kind of new to Objective-C and I'm wondering what is the difference between the following two statements?

[object performSelector:@selector(doSomething)]; 

[object doSomething];

Solution

  • Basically performSelector allows you to dynamically determine which selector to call a selector on the given object. In other words the selector need not be determined before runtime.

    Thus even though these are equivalent:

    [anObject aMethod]; 
    [anObject performSelector:@selector(aMethod)]; 
    

    The second form allows you to do this:

    SEL aSelector = findTheAppropriateSelectorForTheCurrentSituation();
    [anObject performSelector: aSelector];
    

    before you send the message.