Поддерживается ли вызов метода для super при реализации блока Objective-C?
Когда я вызывал метод на super , возникала ошибка EXC_BAD_ACCESS , но как только я изменил эти вызовы с [super methodToCall]
на [self methodToCall]
, и сообщение переместилось до цепочки респондента это работало нормально.
В экземпляре класса, в котором существует блок, нет реализации -methodToCall
, но в суперклассе есть класс (то есть класс, от которого наследуется self).
Мне просто любопытно узнать подробности о том, почему вызов метода super внутри реализации блока был проблемой в первую очередь (технически), поэтому я могу избежать этого в будущем. У меня есть подозрение, что это связано с тем, как переменные записываются в блок, и что-то со стеком и кучей, но я действительно не имею конкретной идеи.
Примечание: код реализации блока вызывается через несколько секунд после сохранения блока в свойстве, свойство использует copy , поэтому я не думаю, что это проблема жизненного цикла блока, что все выглядит хорошо. Кроме того, это было только сбой на устройстве iPhone (3G), но работал без сбоев в симуляторе iPhone.
Результаты в EXC_BAD_ACCESS
:
[self retrieveItemsForId:idString completionHandler:^(NSError *error) {
if (!error) {
[super didRetrieveItems];
} else {
[super errorRetrievingItems];
}
}];
Работает отлично, реализации -didRetrieveItems
и -errorRetrievingItems
в суперклассе.
[self retrieveItemsForId:idString completionHandler:^(NSError *error) {
if (!error) {
[self didRetrieveItems];
} else {
[self errorRetrievingItems];
}
}];