iOS и ARC : Как сохранить себя во время асинхронных операций?

Это первый раз, когда я возился с w с iOS5 и ARC.Пока все хорошо, работает, но столкнулся с проблемой.

У меня есть пользовательский UIStoryboardSegue, в котором я использую Facebook Connect (или другие службы) для входа пользователя в свое приложение. Проще говоря, он должен делать следующее:

  1. Пользователь нажимает кнопку
  2. Кнопка запускает переход
  3. Переход запускает асинхронный вход в систему, но не сразу запускает контроллер представления
  4. Если и только если вход успешно, переход нажимает на контроллер представления.

Вместо этого происходит то, что начинается вход в систему, но переход немедленно освобождается ARC, прежде чем он успевает завершиться.

Я подумал о быстром и грязном хаке, чтобы предотвратить это:

@interface BSLoginSegue() {
    __strong BSLoginSegue *_retained_self;
}
@end

// Stuff...
// Other stuff...

- (void) perform {
    login();
    _retained_self = self;
}

- (void) loginServiceDidSucceed:(BSLoginService *)svc {
    ...
    _retained_self = nil;
}

Дело в том, что это действительноэто хак, поэтому мне было интересно, есть ли какие-либо другой, более элегантный способ сделать то же самое?

17
задан Kazuki Sakamoto 13 May 2012 в 23:52
поделиться

0 ответов