这是我第一次摆弄 iOS5 和 ARC。到目前为止,一切都很好,它有效,但我遇到了某种问题。
我有一个习惯UIStoryboardSegue
,我使用 Facebook Connect(或其他服务)将用户登录到我的应用程序。简而言之,它应该执行以下操作:
- 用户点击按钮
- Button 触发 Segue
- segue 启动异步登录但不会立即推送视图控制器
- 当且仅当登录成功时,segue 才会推送视图控制器
相反,登录开始了,但是 ARC 在它有机会完成之前立即释放了 segue。
我想到了一个快速'n'dirty hack来防止这种情况:
@interface BSLoginSegue() {
__strong BSLoginSegue *_retained_self;
}
@end
// Stuff...
// Other stuff...
- (void) perform {
login();
_retained_self = self;
}
- (void) loginServiceDidSucceed:(BSLoginService *)svc {
...
_retained_self = nil;
}
问题是,它确实是一个 hack,所以我想知道是否还有其他更优雅的方式可以做到这一点?