Это первый раз, когда я возился с iOS5 и ARC. Пока, так хорошо, это работает, но я столкнулся с какой-то проблемой.
У меня есть пользовательский UIStoryboardSegue
, в котором я использую Facebook Connect (или другие службы) для входа пользователя в мое приложение. Проще говоря, он должен сделать следующее:
- Пользователь нажимает кнопку
- Кнопка запускает Segue
- Сег начинает асинхронный вход, но не сразу нажимает контроллер просмотра
- Если и только в том случае, если логин успешно завершен, segue выталкивает контроллер вида
Вместо этого происходит то, что вход начинается, но segue сразу же освобождается ARC, прежде чем у него будет шанс завершить.
Я подумал о быстром "грязном взломе", чтобы предотвратить это:
@interface BSLoginSegue() {
__strong BSLoginSegue *_retained_self;
}
@end
// Stuff...
// Other stuff...
- (void) perform {
login();
_retained_self = self;
}
- (void) loginServiceDidSucceed:(BSLoginService *)svc {
...
_retained_self = nil;
}
Дело в том, что это действительно хак, поэтому мне было интересно, есть ли какой-нибудь другой, и более элегантный способ, которым я мог бы сделать то же самое?