gpt4 book ai didi

ios - 将弱变量分配给强变量时

转载 作者:行者123 更新时间:2023-11-29 03:06:46 25 4
gpt4 key购买 nike

在阅读SDWebImage源码时,发现了一段

if (url)
{
__weak UIButton *wself = self;
id<SDWebImageOperation> operation = [SDWebImageManager.sharedManager downloadWithURL:url options:options progress:nil completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished)
{
__strong UIButton *sself = wself;
if (!sself) return;
if (image)
{
[sself setBackgroundImage:image forState:state];
}
if (completedBlock && finished)
{
completedBlock(image, error, cacheType);
}
}];
objc_setAssociatedObject(self, &operationKey, operation, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

很容易理解,为了避免retain cycle,self使用了__weak关键字,但是,为什么把wself赋值给强变量sself,block不会还是retain the self吗。

最佳答案

self 是一个 strong 但它在 block 范围之外,所以 block 将保留它。 sself 很强但是在 block 范围内,会在 block 结束时释放,所以没有圈。

顺便说一句,这个 question 的正确答案是对 block 圈的一个很好的解释。

关于ios - 将弱变量分配给强变量时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22680159/

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