PerformSelector warning

I’m receiving a warning

PerformSelector may cause a leak because its selector is unknown

  • iOS - How to implement a performSelector with multiple arguments and with afterDelay?
  • Return value for performSelector:
  • performSelector:withObject: and its retain behavior
  • performSelector in NSOperation subclass
  • scheduledTimerWithTimeInterval vs performselector with delay with iOS 5.0
  • Crash in objc_retain in method performed with performSelector
  • In the code:

    - (void) callDelegate: (SEL) selector withArg: (id) arg error: (NSError*) err
    {
        assert([NSThread isMainThread]);
        if([delegate respondsToSelector: selector])
        {
            if(arg != NULL)
            {
                //this line the warning
                [delegate performSelector: selector 
                               withObject: arg 
                               withObject: err]; 
            }
            else
            {
                //this line the warning
                [delegate performSelector: selector 
                               withObject: err]; 
            }
        }
        else
        {
            NSLog(@"Missed Method");
        }
    }
    

    Header:

    @interface Topscore : UIViewController <NSObject> {
    
    //
    }
    

    5 Solutions Collect From Internet About “PerformSelector warning”

    This is a warning generated by the compiler because -Wundeclared-selector was used while compiling and automatic reference counting (ARC) is enabled. This can be, in general, safely ignored, as it’s obvious that the selector in the variable named “selector” is unknown at compile time, as it will have its value assigned at runtime.

    Your if ... respondsToSelector: selector won’t work because your selector is just the name of the method. For your case you need to check

    if ([delegate respondsToSelector: @selector(method::)]
    

    and for the other case just for method:.

    Anyway, you can supress the warning like this:

    #pragma clang diagnostic push
    #pragma clang diagnostic ignored "-Warc-performSelector-leaks"
        [self performSelector:nextView];
    #pragma clang diagnostic pop
    

    You can also use objc_msgSend instead of performSelector, as described here.

    You could add -Wno-arc-performSelector-leaks for WARNING_CFLAGS in the Build Settings.
    enter image description here

    Found the solution here

    Easiest way is adding this macro to your pch File. Or .m file..

    #pragma GCC diagnostic ignored "-Wundeclared-selector"