performSelector may cause a leak because its selector is unknown IN Singleton Class/ FUNCTION Pointer -Passing Function as parameter

delegates, ios, objective-c

Solution

That is a warning, not an error. Your code should still work.

When you invoke a selector and the compiler can't tell what the selector is, it can't tell if the called method is going to take ownership of the passed object or not, or release it, or whatever. Thus ARC can't be sure that memory management of the parameter will be handled correctly.

You should be able to enclosed the performSelector call in a compiler directive to disable that warning. Then the burden will be on you to make sure the called method does not keep any strong references to the object passed to it, or release the object.

Problem

``` @interface URLClass : NSObject { id target; SEL funObj; } + (URLClass *)sharedInstance; -(void)theBigFunction:(SEL)func :(id)target; @property (nonatomic,retain) SEL funObj; #import "URLClass.h" static URLClass *instance = NULL; @implementation URLClass { NSMutableData *webData; } - (id)init { if ( self = [super init] ) { } return self; } + (URLClass *)sharedInstance { @synchronized([URLClass class]) { if (!instance) instance = [[super alloc] init]; return instance; } return nil; } -(void)theBigFunction:(SEL)func :(id)targetObj{ funObj =func; target=targetObj; NSURL *URL = [NSURL URLWithString:@"urlString"]; NSURLRequest *request = [NSURLRequest requestWithURL:URL]; NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self]; if( connection ) { webData = [NSMutableData data] ; } else { NSLog(@"theConnection is NULL"); } } -(BOOL)connection:(NSURLConnection *)connection canAuthenticateAgainstProtectionSpace:(NSURLProtectionSpace *)protectionSpace { return YES; } -(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { [webData setLength: 0]; } -(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [webData appendData:data]; } -(void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { NSLog(@"ERROR with theConenction"); } -(void)connectionDidFinishLoading:(NSURLConnection *)connection { NSError *error; id jsonObj = [NSJSONSerialization JSONObjectWithData:webData options:0 error:&error]; if (jsonObj!=nil && error==nil) { if ([jsonObj isKindOfClass:[NSDictionary class]]) { NSDictionary *dic=(NSDictionary*)jsonObj; NSLog(@"DIC jsonObj %@ ",dic); NSArray *array=[dic objectForKey:@"items"]; NSLog(@"array jsonObj %@ %d",array,[array count]); }else if ([jsonObj isKindOfClass:[NSArray class]]) { NSArray *arr=(NSArray*)jsonObj; NSLog(@"arr jsonObj %@ ",arr); } } [target performSelector:funObj]; // Not gEtting called the aboue line ``` //performSelector may cause a leak because its selector is unknown warning in above line } When am planing to execute below lines form code from any class . its not get called. ``` -(void)loginPress:(id)sender{ URLClass *rlOBJ=[URLClass sharedInstance]; [rlOBJ theBigFunction:@selector(upd_Handler:) :self]; } - (void) upd_Handler: (id) value{ NSLog( @"Seccess"); } ```

Original source