gpt4 book ai didi

ios - 为什么弱强舞会保持循环?

转载 作者:行者123 更新时间:2023-12-01 18:37:34 24 4
gpt4 key购买 nike

这是我的代码:

NSLog(@"%p",self);

__weak typeof(self) weakSelf = self;
NSLog(@"%p", weakSelf);

[self setBlk:^{
__strong typeof(weakSelf) strongSelf = weakSelf;
NSLog(@"%p", strongSelf);

strongSelf.str = @"foo";
}];

self.blk();
blkstr是属性(property)。

我得到了这样的日志:
2018-04-03 14:51:57.151946+0800 Block[20267:148833] 0x7fafa1506d90
2018-04-03 14:51:57.152177+0800 Block[20267:148833] 0x7fafa1506d90
2018-04-03 14:51:57.152359+0800 Block[20267:148833] 0x7fafa1506d90

结论是 selfweakSelfstrongSelf指向同一个对象,它们的不同只是强或弱。在我看来, selfstrongSelf是相同的。所以我认为这段代码的内存是这样的:



我的困惑是当 block 执行时, block 将强引用自身,但如果自身没有同时释放,自身也是强引用 block 。它会导致保留循环吗?

最佳答案

在我看来,它不会导致保留周期。我认为你误解了一些观点。

  • block 不保留 self 的强引用,它保持弱引用。
  • selfstrongSelf不完全相同。
  • strongSelfweakSelf 的强引用不是 self 所以它不会导致保留周期。
  • 如果 self block 执行时未释放,strongSelf将是 self 的有力引用.但是strongSelf是一个局部变量,它只会使 self 在 block 完全执行之前无法被释放。
  • 关于ios - 为什么弱强舞会保持循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49624689/

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