Конечно, рекомендуется объявлять все методы в заголовочном файле, поэтому я ценю, когда xcode предупреждает меня, что метод экземпляра может быть не найден. Однако бывают случаи, когда я не объявляю метод в заголовке и не получаю предупреждения. Это определенно не какие-либо делегированные методы, так что в других случаях это может вызвать такое поведение?
Вероятно, метод уже определен в реализации ко времени его использования. Т.е. если используемый метод находится выше места, в котором он используется в файле реализации, то компилятор знает сигнатуру метода, поэтому все в порядке.
Если вы вызываете ваш метод в ваше определение тела метода работает, например:
-(void)foo { bla } [self foo];
Если вы тоже наоборот обрушиваетесь (если метод не в вашем заголовочном файле):
[self foo]; -(void)foo { bla }
если ваш метод не объявлен в заголовочном файле (или расширении класса), но предшествует другому методу, который ссылается на него, вы не получите ошибку.