gpt4 book ai didi

cocoa-touch - 是否有必要始终在 block 内使用对 self 的弱引用..?

转载 作者:行者123 更新时间:2023-12-03 16:00:37 26 4
gpt4 key购买 nike

我对在 block 内使用 self 感到困惑,我浏览了一些 Apple 的文档,但仍然找不到正确的答案。

有人总是说在 block 内使用weak self,但也有人说在复制的 block 中使用weak self,没必要总是使用。

示例 1:

self.handler = ^(id response, NSError *error)
{
self.newresponse = response; //use weak self here
};

示例 2:

使用弱 self ;

__weak myViewController *weakSelf = self;

[UIView animateWithDuration:interval delay:0.0 options:curve animations:^
{
[weakSelf.view.superview setTransform:CGAffineTransformMakeTranslation(0, -106)];
//in above is it use of weak is neassary
}
completion:^(BOOL finished)
{

}];

没有弱小的 self ;

__weak myViewController *weakSelf = self;

[UIView animateWithDuration:interval delay:0.0 options:curve animations:^
{
[myViewController.view.superview setTransform:CGAffineTransformMakeTranslation(0, -106)];

}
completion:^(BOOL finished)
{

}];

在上面的示例中,哪些是正确的......?**我正在使用 ARC

最佳答案

您应该只使用对 self 的弱引用,如果self将保留该 block 的引用。

在您的示例中,您没有在 self 中保留对 block 的引用。 ,您仅使用与 UIView animateWithDuration: 内联的 block ,因此无需使用 __weak myViewController *weakSelf = self;

为什么会出现这样的情况呢?因为 block 将保留对使用该 block 的类中使用的任何变量的强引用。这包括 self 。现在,如果类实例本身保留了对 block 的强引用,而 block 也保留了对类实例的强引用,那么就会出现保留循环,这将导致内存泄漏。

关于cocoa-touch - 是否有必要始终在 block 内使用对 self 的弱引用..?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13194613/

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