インストルメントを使用して、ナビゲーション コントローラーからポップしたときに View Controller が dealloc を呼び出さない理由を発見しようとしています。割り当てを確認したところ、View Controller をポップすると、RefCt が 2 のままであることがわかりました。retain<->release メッセージをすべて調べてみたところ、おかしな割り当てのグループが 1 つ見つかりました。これらのメッセージは 30 あり、16 の保持と 14 のリリースがあります。これは私の問題ですか?これらの呼び出しは何をしているのですか? どこかのブロックに自分自身を保持していると思います..?
Retain __copy_helper_block_335
Retain __copy_helper_block_361
Retain __copy_helper_block_391
Retain __copy_helper_block_387
Retain __copy_helper_block_91
Retain __copy_helper_block_84
Retain __copy_helper_block_1797
Retain __copy_helper_block_2139
Retain __copy_helper_block_2143
Retain __copy_helper_block_1647
Retain __copy_helper_block_2139
Retain __copy_helper_block_2143
Retain __copy_helper_block_1678
Retain __copy_helper_block_2139
Retain __copy_helper_block_2143
Retain __copy_helper_block_57
Release __destroy_helper_block_392
Release __destroy_helper_block_336
Release __destroy_helper_block_388
Release __destroy_helper_block_92
Release __destroy_helper_block_85
Release __destroy_helper_block_2140
Release __destroy_helper_block_2144
Release __destroy_helper_block_1648
Release __destroy_helper_block_2140
Release __destroy_helper_block_2144
Release __destroy_helper_block_1679
Release __destroy_helper_block_2140
Release __destroy_helper_block_2144
Release __destroy_helper_block_58
ビュー コントローラーが dealloc を呼び出さないことに関する他の多くの質問を読みましたが、RefCt を 0 にするのにまだ問題があります。 . ただし、__weak の代わりに self を使用する場所もあります ([GKMatchmaker sharedMatchmaker].inviteHandler = ^(GKInvite *acceptedInvite, NSArray *playersToInvite) など)。ここでweakSelfを使用する必要がありますか?
- (void) setupInvitationHandler {
[GKMatchmaker sharedMatchmaker].inviteHandler = ^(GKInvite *acceptedInvite, NSArray *playersToInvite) {
( ... )
GKMatchmakerViewController *mmvc = [[GKMatchmakerViewController alloc] initWithInvite:acceptedInvite];
mmvc.matchmakerDelegate = [self.navigationController.viewControllers objectAtIndex:0];
[self presentViewController:mmvc animated:YES completion:^{
[self.navigationController popToRootViewControllerAnimated:NO];
}];
}];
}