I have a situation where I want to call a method on a target where calling perform selector gives the error: PerformSelector may cause a leak because its selector is unknown
.
To get round this I'm using the excellent solution from this SO question:
if (self.target) {
IMP imp = [self.target methodForSelector:self.selector];
void (*func)(id, SEL, id) = (void *)imp;
func(self.target, self.selector, argument);
}
Now this code is part of a framework that I'm using in a Swift project and it's causing a crash.
If I ignore the warnings and use [self.target performSelector:self.selector withObject:self.argument];
It works fine.
So... I'm assuming this is to do with fundamental Swift vs. Objective-C message sending architecture. Please could someone tell me a) What's going on? b) how to get around it.