问题标签 [retain-cycle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
39532 浏览

ios - 在 dispatch_async 函数中使用弱自身

我阅读了很多关于使用__weak selfinside的帖子dispatch_async,现在我有点困惑。

如果我有 :

我需要使用__weak self. 因为我读到在某些情况下dispatch_async 不需要__weak self.

在此处查看最后一条评论

0 投票
3 回答
572 浏览

ios - ARC,自我和块

我以为我理解 self 在复制的块中的用法是no no

但是为了清理我的代码,我在 Xcode 中启用了一堆警告,一个叫做“向弱指针发送消息”

所以现在在我所有的块中,每次我使用我创建的weakself参考__weak typeof(self) weakself = self;

我收到这个警告:Weak receiver may be unpredictably set to nil

一个简单的例子:

我已经看到了在块中定义 self 版本的答案,如下所示:

所以我想知道这里实际发生了什么:

  • 我只是在欺骗编译器吗?
  • 强引用对弱引用有什么作用?
  • 我还缺少什么。

谢谢。

0 投票
2 回答
77 浏览

cocoa-touch - 保留周期有时可以吗?

假设我有一个对象应该在应用程序的整个生命周期中作为单例存在。这个对象是否可以包含一个强引用,例如,将NSTimer自身作为计时器的目标?这将是一个保留周期,但我没有看到任何不利之处。dealloc当操作系统尝试释放内存时,无论如何都不需要调用。

0 投票
1 回答
1782 浏览

objective-c - 向 self 添加 KVO 观察者会导致内存泄漏吗?

在 nsobject 中,您有一个要观察自身的属性“keyPath”并使用

上述行会导致保留周期吗?

我提出这个问题是因为我想知道它是否是重写一堆 setter 函数的可行替代方案。

0 投票
2 回答
313 浏览

objective-c - 了解 ARC 下带有块的微妙保留循环

我正在研究从Matt Galloway的Effective Objective-C书中获取的代码片段。片段如下(我已经修改了一点)。

正如作者所说,这种模式被不同的网络库使用,并且存在一个保留周期。保留周期对我来说非常明显,因为如果您从对象图的角度考虑,networkFetcher实例通过completionHandler属性(copyied )保留块,而块保留它,networkFetcher因为它在中使用它NSLog

现在,要中断块,NetworkFetcher必须将完成处理程序设置为完成nil下载已请求的数据。

好的。这样就没有保留周期了。该块在运行时,它会释放其对 的引用,networkFetchernetworkFetcher产生nil对块的引用。

现在,我的问题是关于片段的执行流程。以下操作顺序是否正确?

  1. networkFetcher运行完成处理程序
  2. 该块被执行
  3. 该块释放对networkFetcher
  4. networkFetcher释放对块的引用

我的怀疑取决于行动 3) 和 4) 。如果 3) 在 4) 之前执行,则没有人引用networkFetcher,因此可以在任何执行时间释放它(ARC 将在 结束时发出释放调用downloadData)。我错了还是我错过了什么?

希望问题很清楚。

0 投票
1 回答
717 浏览

ios - 从superview中删除后uiviewcontroller仍然保留,是保留周期问题吗

我有一个 UIViewController 子类 ABCViewController。在长按按钮时,我打开一个包含 UIViewController(AddProduct) 的 UIPopover 在 abuton 长按时。添加产品包含一个取消按钮,可将用户带回 ABCViewControl.and 在仪器分配工具中它也消失了.罚款到这一点。像这样的事情..

}

AddProduct 包含一个编辑按钮,该按钮打开一个单独的 uiviewcontroller(AddProductSeparateViewController)。它 (AddProduct) 还包含一个取消按钮。单击取消按钮时用户返回 ABCViewCintroller。

**问题:**AddProduct 是在此过程中发布,但 AddProductSeparateViewController 没有根据分配工具的活动对象和 dealloc 断点发布。

AddProduct 中打开 AddProductSeparateViewController 的代码如下:

}

这个委托基本上通知 ABCViewController 打开 AddProductSeparateViewController。

}

}

AddProductSeparateViewController 中要取消的代码如下:

}

为什么 AddProductSeparateViewController 在这个过程中没有释放。

谢谢

0 投票
1 回答
335 浏览

ios - 在weakSelf 调用的方法中引用weakSelf 会导致保留周期吗?

我想我了解如何创建简单的保留周期,但我不完全了解更复杂的情况。

这是会导致保留周期的代码。(正确的?)

为避免该保留周期,我将创建对以下内容的弱引用self

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

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

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

如果我更进一步呢?

一路下来还好...

0 投票
1 回答
760 浏览

ios - iOS:块和 ivars

在很多问题中,都会询问是否可以在blocks中使用self。答案是否定的,避免保留循环。

现在,当我在我的块中使用“ivar”时UIViewController应该没问题。但是当我使用:

dealloc方法从未调用过:

当我删除if(_object != nil){,该dealloc方法被调用。

_object在将它传递给块之前我应该​​对它进行弱引用吗?

0 投票
2 回答
142 浏览

ios - 为什么建议对委托使用 _weak 引用

大家好,是否有人会详细说明为什么建议对代表使用 _weak 引用而不是强引用?虽然我们也可以对委托使用强引用。有人会用更好的描述性示例以简单的方式告诉我,在哪些情况下我们应该使用强引用以及在哪些情况下我们应该为代表使用 _weak 引用。

我经历了有关堆栈溢出的相关问题之一

是否可以为代表提供“强”参考?

但它并没有正确地清除我的概念。

任何帮助将不胜感激!

谢谢。

0 投票
1 回答
178 浏览

objective-c - 在块内使用带有 self 的方法

我需要在两个块中执行相同的一堆代码(我正在使用 ARC):

在另一个地方我打电话:

然后我有我的处理程序:

用这种方式省钱吗?请注意该handleError:方法self在内部使用。如果不是,那么这里的正确方法是什么?顺便说一句:self 是一个 viewController,可以解除分配(doB: 和 doA: 块是基于网络的,所以可能很慢)。