gpt4 book ai didi

ios - 从 weakSelf 调用的方法中引用 weakSelf 会导致保留循环吗?

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

<分区>

我想我明白创建保留循环是多么简单,但我不完全理解更复杂的情况。

这是会导致保留循环的代码。 (对吗?)

[self.dataController loadInitialWithCompletion:^(BOOL dataChanged) {
self.loading = NO;
}];

为了避免循环引用,我会创建一个对 self 的弱引用:

__weak typeof(self) welf = self;
[self.dataController loadInitialWithCompletion:^(BOOL dataChanged) {
welf.loading = NO;
}];

我希望到目前为止我是正确的。

这就是它变得有趣的地方。我有一个方法可以计算和缓存文本高度,然后在 tableView 上调用 reloadData。该方法异步执行并在完成时调用它的 completionBlock(在 mainThread 上)。

 __weak typeof(self) welf = self;
[self.dataController loadInitialWithCompletion:^(BOOL dataChanged) {
[welf relayoutWithCompletion:^(CGPoint offsetBeforeReload) {
welf.loading = NO;

if (dataChanged) {
[welf save];
}

}];
}];

此代码是否会导致保留周期,因为 welfrelayoutWithCompletion: 的 completionBlock 中捕获了自身?我是否正确地认为因为 welf 是一个弱引用我将避免保留周期?

如果我更进一步呢?

 __weak typeof(self) welf = self;
[self.dataController loadInitialWithCompletion:^(BOOL dataChanged) {
[welf relayoutWithCompletion:^(CGPoint offsetBeforeReload) {

if (offsetBeforeReload.y > 64) {
[welf scrollToPoint:offsetBeforeReload completion:^{
welf.loading = NO;
[welf save];

}];
}

}];
}];

一直往下都是welf...

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