Мы работали над некоторым кодом, который вызывал метод перечисления:
- (void)enumerateRangesOfString:(NSString*)string usingBlock:(void (^)(const NSRange range, volatile BOOL * const stop))block;
Все это работало нормально, пока мы не перешли на ARC.
Когда мы посмотрели на код, который его вызывал, приложение перестало падать, если мы однозначно объявили блок:
id block = ^(const NSRange range, volatile BOOL * const stop) {
[solutions_ addObject:object];
};
[[puzzle_ stringForSolution:solution enumerateRangesOfString:word usingBlock:block];
Когда блок был объявлен в строке вызова метода, приложение вылетало. Мы (я) на самом деле не знали, почему это решит проблему, но я согласился с этим, потому что не хотел продолжать биться головой о стену.
Проблема в том, что это похоже на каждое встроенное объявление блоков при вызове метода. Мое приложение продолжало падать после того, как я добавил в приложение библиотеку AFNetworking. Проблема в том, что я действительно не хочу проходить и менять весь код этой библиотеки, я предполагаю, что с моим кодом что-то не так. Эта проблема продолжает вызывать сбои, когда я оставляю блоки, объявленные встроенными, а не когда я вытаскиваю блок и объявляю его отдельно.
Я использую AFNetworking в паре других приложений. Очевидно, все мы знаем, что блоки можно объявлять встроенными. Что приводит меня к выводу, что ошибка не в вызове метода, а где-то в этом проекте, который падает.