Проблема в том, что ARC не может определить семантику управления памятью для метода, который вы вызываете с -performSelector:withObject:
. В случае MRR это не имело значения, поскольку ожидалось, что вызывающий код будет соответствующим образом иметь с ним дело (например, путем освобождения возвращаемого значения, если это был принадлежащий объект). Но в ARC компилятору необходимо , чтобы знать, что эта информация верна. Я не помню, как по умолчанию он работает с -performSelector:withObject:
, возможно, он просто обрабатывается как не принадлежащая ссылка, и в этом случае вы на самом деле не пропускаете.
Самый простой способ справиться с такого рода шаблоном делегата - это по-прежнему использовать -respondsToSelector:
, а затем просто вызывать метод напрямую, например,
if ([_delegate respondsToSelector:@selector(foo:)]) {
[_delegate foo:self];
}
В вашем случае сам метод на самом деле не знает, что такое селектор. Лучше всего, вероятно, полностью отказаться от этого метода и позволить его бывшим посетителям разобраться с делегатом.