gpt4 book ai didi

ios - 圆弧 : Dealloc not being called

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:11:08 24 4
gpt4 key购买 nike

我不明白为什么我需要在某些 block 中有一个弱的 self ,而其他的似乎工作正常。

如果我在 Notification block 中没有对 self 的弱引用,dealloc 将不会被释放。不过,它与第二个效果很好。

//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];
}];

最佳答案

这是因为随着时间的推移,一个引用消失了(例如 - 当调用完成处理程序时),该 block 被释放。在这种情况下,没有保留循环,因为对 self 的引用将被释放。

但是,对于 NSNotification 示例,必须始终保留 block 引用(除非手动删除它),因为它仍在监听 NSNotification。在这种情况下,对 self 的引用会导致一个保留周期,从而导致该类不被保留。

关于ios - 圆弧 : Dealloc not being called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15387386/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com