问题标签 [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 投票
11 回答
127219 浏览

ios - 如何使用参数正确处理 Swift 块中的弱自我

在我的TextViewTableViewCell中,我有一个变量来跟踪一个块和一个配置方法,该块被传入和分配。
这是我的TextViewTableViewCell课:

当我在我的方法中使用configure方法时cellForRowAtIndexPath,如何在我传入的块中正确使用弱自我。
这是我没有弱自我的情况:

更新:我得到了以下使用[weak self]

当我这样做[unowned self]而不是[weak self]取出if声明时,应用程序崩溃了。关于这应该如何工作的任何想法[unowned self]

0 投票
2 回答
606 浏览

objective-c - Objective-C weakself declaration

I was looking through some Apple sample code for their 2014 WWDC session 'Advanced User Interfaces with Collection Views' and came across a weakself declaration that looked like the following:

My question is: what do the &* mean in the declaration? Why not just have:

Thanks for your help.

0 投票
2 回答
403 浏览

ios - 这如何防止块保留循环?

我在这里看到了防止块保留周期的解决方案

但是我很难理解它为什么或什至是如何工作的。

在示例中,进行了弱自引用并对其进行了操作。我可以看到这是如何打破循环的。但是,在块内会创建一个强引用。这不会重新创建我们最初试图阻止的保留周期吗?

比如说self是0x123,那么weakself也指向0x123。然后 strongSelf 将在块内设置为 0x123。
这不会形成一个保留循环吗?(self 对 block 有很强的引用,而 strongSelf 对 self 有很强的引用)

0 投票
1 回答
1335 浏览

arrays - 在 Swift 中从 Dictionary 中获取值或键时保持循环

当我从字典中获取值并将它们放入数组时,我无法再释放内存。我试图从数组和字典中删除所有对象,但这些对象仍然存在于某处(未调用 deinit)。

我是这样玩的:

如果我删除这两行进行值提取,则正常调用 Deinit

我在这里做错了什么?

当不再需要对象时,如何以正确的方式删除对象以释放内存?仅当从 Dictionary(Dictionary.values 或 Dictionary.keys)中提取键或值时才会出现此问题。

编辑:

我为这种情况做了一个解决方法。如果我使用 NSDictionary 而不是 Dictionary 并首先提取键,然后在 for 循环中取值,那么它就可以工作。

但是,如果我使用 allValues 而不是 allKeys,那么它将不再起作用。

0 投票
4 回答
4773 浏览

swift - 不能对 Swift 中的闭包进行弱引用

更新:我尝试在不使其变弱的情况下编写它,并且似乎没有泄漏。所以也许这个问题不再需要了。


在 Objective-C ARC 中,当你想让闭包能够在闭包内部使用自己时,块不能捕获对自身的强引用,否则它将是一个保留循环,所以你可以让闭包捕获一个对自身的弱引用,如下所示:

我试图把它翻译成 Swift:

但是,Swift 编译器不允许我声明要弱捕获的函数 ( 'weak' cannot be applied to non-class type 'Int -> Int')。[unowned fib]也不起作用('unowned' cannot be applied to non-class type '(Int -> Int)?')。

我知道函数不是 Swift 中的类类型。但是,它们是引用类型,并且它们确实参与了引用计数。因此,不应该有办法让它们成为弱引用或无主引用吗?

我将如何在没有保留循环的 Swift 中编写递归闭包?

0 投票
1 回答
59 浏览

ios - 这会导致保留周期吗

xCode 5.1、iOS 7.1、ARC 这会导致主题的保留周期吗?我不这么认为,因为设置event=nil会释放整个树,所以主题也会被释放,但我不确定。

0 投票
2 回答
2757 浏览

swift - 无主与弱。为什么我们应该更喜欢无主?

正如 Apple 在“The Swift Programming Language”中所说,我们似乎应该unownedweak任何时候都更喜欢:

如果捕获的引用永远不会变为 nil,则应始终将其捕获为无主引用,而不是弱引用。

来自本页的“弱引用和无主引用”部分

我确实知道这两者之间的区别。但我很好奇有什么好的理由更喜欢 unownedweak吗?我认为weak它更安全,我们总是可以编写[weak obj]一个可选的绑定检查,而不用考虑obj.

它与一些性能考虑或我错过的东西有关吗?还是完全可以使用weak而不是一直使用unowned

0 投票
1 回答
207 浏览

ios - 这会导致保留周期吗?(obj-c,示例代码)

SomeViewController具有someBlock作为属性,父视图控制器self呈现newController,并且newController'ssomeBlock正在访问父视图控制器的self.someProperty.

这会导致保留周期吗?

0 投票
1 回答
49 浏览

ios - 其中哪一项会导致保留周期?(obj-c,示例代码)

在使用块时仍然试图掌握保留周期的窍门。我的问题是.. 以下哪一项(如果有)会导致保留周期?

1

2

3

4

谢谢!

0 投票
1 回答
74 浏览

ios - Retain Cycle Even when using Weak/Strong ARC Semantics

`I admit that I am not an expert on ARC and retain cycles though through some research and some great articles (like this), I believe I get the basics.

However, I am currently stumped. I have a property defined as follows.

Inside my init, I do the following.

and here is my dealloc

If the dispatch_aync block is commented out, I see my Foo dealloc get called immediately after foo is set to nil. With the block commented in, foo's delloc is not called.

I've got a retain cycle correct? Any idea how?