一部のブロックで弱い自己が必要な理由がわかりませんが、他のブロックは正常に機能しているようです。
Notificationブロックで自分自身への弱い参照がない場合、deallocは解放されません。ただし、2番目の場合は完全に正常に機能します。
//When using this, dealloc is NOT being called
[[NSNotificationCenter defaultCenter] addObserverForName:PROD_DONE object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
[self hideAds];
}];
//When using this, dealloc IS being called
[_match endMatchInTurnWithMatchData:_match.matchData completionHandler:^(NSError *error) {
[self hideAds];
}];
自分自身への弱い参照を作成すると、それは機能します:
__weak GameViewController *weakSelf = self;
[[NSNotificationCenter defaultCenter] addObserverForName:PROD_DONE object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {
[weakSelf hideAds];
}];