问题标签 [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.
ios - 如何使用参数正确处理 Swift 块中的弱自我
在我的TextViewTableViewCell
中,我有一个变量来跟踪一个块和一个配置方法,该块被传入和分配。
这是我的TextViewTableViewCell
课:
当我在我的方法中使用configure方法时cellForRowAtIndexPath
,如何在我传入的块中正确使用弱自我。
这是我没有弱自我的情况:
更新:我得到了以下使用[weak self]
:
当我这样做[unowned self]
而不是[weak self]
取出if
声明时,应用程序崩溃了。关于这应该如何工作的任何想法[unowned self]
?
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.
ios - 这如何防止块保留循环?
我在这里看到了防止块保留周期的解决方案
但是我很难理解它为什么或什至是如何工作的。
在示例中,进行了弱自引用并对其进行了操作。我可以看到这是如何打破循环的。但是,在块内会创建一个强引用。这不会重新创建我们最初试图阻止的保留周期吗?
比如说self是0x123,那么weakself也指向0x123。然后 strongSelf 将在块内设置为 0x123。
这不会形成一个保留循环吗?(self 对 block 有很强的引用,而 strongSelf 对 self 有很强的引用)
arrays - 在 Swift 中从 Dictionary 中获取值或键时保持循环
当我从字典中获取值并将它们放入数组时,我无法再释放内存。我试图从数组和字典中删除所有对象,但这些对象仍然存在于某处(未调用 deinit)。
我是这样玩的:
如果我删除这两行进行值提取,则正常调用 Deinit
我在这里做错了什么?
当不再需要对象时,如何以正确的方式删除对象以释放内存?仅当从 Dictionary(Dictionary.values 或 Dictionary.keys)中提取键或值时才会出现此问题。
编辑:
我为这种情况做了一个解决方法。如果我使用 NSDictionary 而不是 Dictionary 并首先提取键,然后在 for 循环中取值,那么它就可以工作。
但是,如果我使用 allValues 而不是 allKeys,那么它将不再起作用。
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 中编写递归闭包?
ios - 这会导致保留周期吗
xCode 5.1、iOS 7.1、ARC 这会导致主题的保留周期吗?我不这么认为,因为设置event=nil
会释放整个树,所以主题也会被释放,但我不确定。
swift - 无主与弱。为什么我们应该更喜欢无主?
正如 Apple 在“The Swift Programming Language”中所说,我们似乎应该unowned
比weak
任何时候都更喜欢:
如果捕获的引用永远不会变为 nil,则应始终将其捕获为无主引用,而不是弱引用。
来自本页的“弱引用和无主引用”部分
我确实知道这两者之间的区别。但我很好奇有什么好的理由更喜欢 unowned
比weak
吗?我认为weak
它更安全,我们总是可以编写[weak obj]
一个可选的绑定检查,而不用考虑obj
.
它与一些性能考虑或我错过的东西有关吗?还是完全可以使用weak
而不是一直使用unowned
?
ios - 这会导致保留周期吗?(obj-c,示例代码)
SomeViewController
具有someBlock
作为属性,父视图控制器self
呈现newController
,并且newController
'ssomeBlock
正在访问父视图控制器的self.someProperty
.
这会导致保留周期吗?
ios - 其中哪一项会导致保留周期?(obj-c,示例代码)
在使用块时仍然试图掌握保留周期的窍门。我的问题是.. 以下哪一项(如果有)会导致保留周期?
1
2
3
4
谢谢!
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?