- (void) startLoading {
[self blink];
}
- (void) blink {
[UIView animateWithDuration:0.5
delay: 0.0
options: UIViewAnimationOptionAllowUserInteraction | UIViewAnimationOptionCurveEaseOut
animations:^{
//animate stuff
}
completion:^(BOOL finished){
[self blink];
}];
}
- (void) stopLoading {
//What goes here?
}
В моем UIView'е initWithFrame
я создаю некоторую графику загрузчика, затем запускаю анимацию загрузчика с [self startLoading]
.
Вопрос теперь в том, как мне остановить этот «бесконечный цикл».'? или что происходит в методе stopLoading или dealloc, чтобы красиво все разрушить?
Когда я игнорирую тот факт, что блок завершения есть, и просто освобождаю свой UIView изSuper View, все идет хорошо в течение нескольких секунд (больше, чем указано 0,5 секунды), затем приложение вылетает с сообщением:
malloc: * mmap (size = 2097152) не удалось (код ошибки= 12) ошибка: невозможно выделить область ** установить точку останова в malloc_error_break для отладки
У меня есть точка останова в malloc_error_break, и виновником является блок анимации.
Я предполагаю, что UIView был освобожден, будучи удаленным из суперпредставления, и позже выполняется блок завершения, имеющий ссылку на self
, это сообщение об освобожденном объекте.
яне могу найти в документации ничего об отмене блока 'в очереди'.