Как решить PerformSelector может вызвать утечку, потому что его селектор неизвестен

Я пытаюсь избавиться от предупреждения PerformSelector в соответствии с решением, описанным в этом ответе: performSelector может вызвать утечку, поскольку его селектор неизвестен

Строка, которая вызывает проблему:

if ([self.target respondsToSelector:self.action]) {
    [self.target performSelector:self.action withObject:self];
}

Я попытался решить эту проблему, изменив код на:

if ([self.target respondsToSelector:self.action]) {
    SEL selector = self.action;
    IMP imp = [self.target methodForSelector:selector];
    void (*func)(id, SEL) = (void *)imp;
    func(self.target, selector);
}

Хотя оно больше не сообщает о проблеме, приложение аварийно завершает работу при вызове этого метода. Как я могу решить эту проблему? Этот вопрос не является дубликатом, потому что я прочитал другой ответ и до сих пор не могу решить проблему.


person Youngin    schedule 23.12.2014    source источник
comment
Возможно, вам не хватает параметра, который нужно передать в func. Попробуйте добавить третий параметр в переменную func при объявлении и вызове.   -  person mithlesh jha    schedule 23.12.2014
comment
Спасибо за ответ. Вы были правы, мне не хватало объекта self. Вот что у меня сработало: if ([self.target responsesToSelector: self.action]) { NSObject *selfOBJ = self; Селектор SEL = self.action; IMP imp = [self.target methodForSelector:selector]; void (*func)(id, SEL, id) = (void *)imp; func(self.target, селектор, selfOBJ); }   -  person Youngin    schedule 23.12.2014