iOS5とARCをいじるのは初めてです。これまでのところ、それはうまくいきますが、私はある種の問題に遭遇しました。
UIStoryboardSegue
Facebook Connect(または他のサービス)を使用してユーザーをアプリにログインさせる習慣があります。簡単に言えば、次のようにする必要があります。
- ユーザーがボタンをクリックします
- ボタンはセグエを発射します
- セグエは非同期ログインを開始しますが、ViewControllerをすぐにはプッシュしません
- ログインが成功した場合にのみ、セグエがViewControllerをプッシュします
代わりに、ログインが開始されますが、セグエは完了する前にARCによってすぐに解放されます。
私はこれを防ぐために素早く「汚い」ハックを考えました:
@interface BSLoginSegue() {
__strong BSLoginSegue *_retained_self;
}
@end
// Stuff...
// Other stuff...
- (void) perform {
login();
_retained_self = self;
}
- (void) loginServiceDidSucceed:(BSLoginService *)svc {
...
_retained_self = nil;
}
実はそれはハックなので、他にもっとエレガントな方法で同じことができるのではないかと思っていました。