问题标签 [strong-references]

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 投票
1 回答
1643 浏览

ios - Objective C 中的 __strong 用法示例

我在这里阅读了关于 __strong 参考和 __weak 参考用法的信息:iOS5 中强存储和弱存储的解释

我尝试编写一些代码来展示这些知识。但是,__strong 在对象被释放时并未将其保留在内存中。第一次我这样做:

一切都按预期工作。调用父对象init,释放时调用dealloc。

第二我这样做了:

调用了 Parent 对象的 init 方法。但是因为 fumu 引用的 Parent 对象的保留计数仍然为 1,所以没有调用 dealloc。正如预期的那样。

使用 __strong

就像声明的那样:

现在假设我使用 __strong 关键字。如果我像下面添加另一个强引用,则父对象不应该调用 dealloc,因为我们仍然有一个强引用(anotherFumu)。但是,当我运行它时,会调用 dealloc。我没有看到强参考有任何影响。

请指教。谢谢

结果:

我打开了 ARC,并简单地使用 nil 将强指针指向远离 Parent 对象,从而能够正确地看到 __strong 和 __weak 的行为,如下所示:

0 投票
2 回答
1434 浏览

python-2.7 - 如何将弱引用更改为强引用?

我使用 RPyC 连接到客户端并使用参数对象调用服务公开方法。我想从暴露的方法中获取这个对象并用它做一些事情,但是这个对象是弱引用的,当时我想访问它的数据:我得到一个 ReferenceError 告诉我对象“弱引用对象没有不再存在”

如何从垃圾收集中保护具有弱引用的对象?如何将其更改为强引用?

server.py(发送消息)

client.py(处理数据并将其放入队列)

other.py(读取队列)

0 投票
1 回答
247 浏览

swift - 对关闭强引用循环感到困惑?

我的问题是:为什么闭包声明为 Lazy,我知道这与self在闭包中不为人所知有关,但对于尚未创建的init方法来说,情况不一样吗?self

其次,这个代码示例中的强引用循环到底在哪里,是否self是强引用asHTML,如果是,导致循环的强引用的第二部分在哪里?

text第三,当常量不能改变值时,为什么常量属性是可选的(从nil到一个值并返回到nil)?

最后,当方法用于接受用户发送的参数时,方法中有参数text: String? = nil是什么意思?initinit

抱歉这个长问题,我只是对闭包强引用循环感到困惑......虽然我确实理解类属性和类实例之间的强引用循环。

0 投票
2 回答
712 浏览

ios - 这个objective-c代码是否创建了一个强大的引用循环?

我在别人的 iOS 项目中工作。ARC 已启用(据我所知,一直是启用的)。代码中到处都是按钮按下处理程序,这些处理程序创建某个视图控制器的实例,将其委托设置为 self,然后显示它,例如,

MyViewController 显示了一个用于选择音乐键的旋转小部件。一旦选择,用户按下回以使用选定的键来制作音乐。这些是唯一的用户交互,并且没有后台进程等。

在 MyViewController.h 文件中,委托声明如下:

我有两个问题:

  1. 为什么原作者会选择在每次按下按钮时创建一个新的 MyViewController 实例?
  2. 谁拥有每个这样的实例?[什么时候]它会被摧毁?由于它拥有对其委托的强引用,当前的实现是否创建了一个强引用循环[每次按下按钮]

我自己的直觉是在委托中创建一个私有的 MyViewController * 属性,该属性仅在第一次按下按钮时加载。然后,根据一般建议,我会将 MyViewController 中的委托属性设为弱而不是强。但就像我说的,当前的实现非常普遍,所以我对在不先了解它是如何工作的情况下改变任何东西持怀疑态度。

任何帮助表示赞赏。

0 投票
2 回答
1176 浏览

ios - 异步或静态调用如何实现强保留周期?

我试图掌握如何识别何时可能有强大的保留周期并需要我使用[weak/unowned self]. 我因不必要的使用[weak/unowned self]而被烧毁,并且在给我机会使用它之前立即释放了自我。

例如,下面是self闭包中引用的异步网络调用。由于网络调用是在没有将调用本身存储到变量中的情况下进行的,这里会发生内存泄漏吗?

这是另一个使用 NSNotificationCenter 的示例,稍后可以异步进行调用:

我的问题是在什么情况下可能会出现强保留周期?如果我在闭包中进行引用 self 的异步调用或静态调用,这是否使其成为候选对象[weak/unowned self]?感谢您对此有所了解。

0 投票
1 回答
259 浏览

swift - 这是一个强引用循环还是内存泄漏?

我经常看到的关于强引用循环的例子涉及两个属性相互指向的类。但是,如果只有一个类具有指向另一个实例的属性,如下所示:

然后我像这样创建我的实例:

由于我已解除分配myClassB,因此引用计数为 1。 的引用计数发生了myClassA.classB什么?它从未达到零,因为我从未做过myClassA.classB = nil或曾经deinit这样做过。自从我这样做以来,这是隐含的myClassA = nil吗?

这是可以归类为强参考循环的吗?我想这至少是内存泄漏,这是真的吗?

0 投票
2 回答
1324 浏览

ios - Why is a strong reference cycle possible with NSNotificationCenter but not UIView.animateWithDuration?

With a NSNotificationCenter block, I have to use [unowned self] to avoid a strong reference cycle:

However, in UIView.animateWithDuration, I do not have to use [unowned self]:

What's the difference?

0 投票
1 回答
490 浏览

visual-c++ - C++ - 当对共享指针的引用数量发生变化时如何中断?

在 Microsoft Visual C++ 2015 中,如何在 Boost 共享指针上设置“数据断点”,以便调试器在强和/或弱引用的数量发生变化时中断?

0 投票
1 回答
433 浏览

memory-management - 将引用转换回闭包内的强引用,内存管理,swift

我正在尝试关闭保留周期,如下所示

稍后在某个时候,我正在做

输出将是

这是可以理解的,因为self在做之前是 nil outself?.additionOf(3, b:5)

如果我通过创建另一个引用[weak self]如下变量的变量在闭包内进行了更改

这次的输出是

我的问题是为什么strongSelfsample = nil. 是不是因为之前在闭包里面被捕获了sample = nil

0 投票
3 回答
659 浏览

swift - Swift - 在关闭中强烈捕获自我后期待泄漏

谁能解释一下为什么这不会泄漏?

self在 a 内捕获,closure因此我将有两个指向对方的强指针,因此,deinit永远不应为 Person 对象调用该消息。

首先,这是我的班级Person

这是我的 ViewController 的实现

我希望能够通过以下方式解决问题:

但这甚至没有必要。为什么?