问题标签 [reference-counting]

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 回答
196 浏览

objective-c - 引用计数在 [obj release] 之​​后仍然为 1,何时应该被释放

当我创建一个对象并检查其保留计数时,我得到了预期的 1。当我释放对象然后再次检查保留计数时,它仍然是1。对象不应该被释放,保留计数为0吗?

如果我设置为第一个,我确实看到保留计数为 0 。这是为什么?strnil

0 投票
2 回答
68 浏览

php - PHP5 中是否引用了字符串?

在 PHP5 中,当作为参数传递或分配给变量时,字符串是否被引用或复制?

0 投票
5 回答
512 浏览

string - 多个字符串变量真的可以引用相同的数据吗?

根据互联网上的信息,我发现以下两个变量指向内存中的同一位置。

任何人都可以提出一个代码示例来证明它实际上是正确的(例如,通过更改第一个变量中的一个字母并看到此更改从第二个变量中可见)?

0 投票
1 回答
11748 浏览

xcode - 初始化期间存储的值永远不会被读取

我正在尝试创建一个游戏,以便我可以更改其数据并将其保存回来。我在注释行中收到两个错误。为什么我会收到这些错误。我分配了游戏,所以我必须正确发布它。这是我保存游戏的代码

我收到错误 1,它说在初始化期间存储到“newGame”的值永远不会被读取。

第二个错误表示调用者此时不拥有的对象的引用计数减少不正确。

这是什么意思?请不要告诉我,您需要阅读内存管理并给我一个链接。请告诉我如何解决这个问题。

0 投票
2 回答
5907 浏览

objective-c - 调用 -retainCount 被认为是有害的

或者,为什么我没有retainCount在暑假使用

这篇文章旨在征求关于这种臭名昭著的方法的原因和原因的详细文章,retainCount以整合围绕 SO 浮动的相关信息。*

  1. 基础知识:不使用的官方原因是什么retainCount?是否有任何可能有用的情况?应该怎么做?** 随意编辑。

  2. 历史/解释:如果不打算使用,为什么 Apple 会在NSObject协议中提供此方法?retainCountApple的代码是否出于某种目的而依赖?如果是这样,为什么不把它藏在某个地方?

  3. 为了更深入地理解:对象的保留计数可能与用户代码中假设的不同的原因是什么?您能否给出框架代码可能使用的标准过程的任何示例***,这些示例会导致这种差异?是否存在任何已知情况,其中保留计数总是与新用户的预期不同?

  4. 你认为还有什么值得一提的retainCount吗?


* 不熟悉 Objective-C 和 Cocoa 的编码人员经常会遇到或至少误解引用计数方案。教程解释可能会提到保留计数,它(根据这些解释)在您调用retainalloccopy等时增加一,在您调用时减少一release(以及在将来的某个时间调用autorelease)。

因此,一个崭露头角的 Cocoa 黑客 Kris 可以很容易地得出这样的想法:检查对象的保留计数将有助于解决一些内存问题,而且,你瞧,每个对象都有一个可用的方法,称为retainCount! Kris调用retainCount了几个对象,这个太高了,那个太低了,这到底是怎么回事?!所以 Kris 在 SO 上发了一个帖子,“我的内存管理出了什么问题?” 然后一大群 <bold>、<large> 字母下降说“不要那样做!你不能依赖结果。”这很好,但我们勇敢的编码员可能需要更深入的解释。

我希望这会变成一个常见问题解答,这是一页来自我们任何一位倾向于撰写一篇文章的专家的优秀信息论文/讲座,当新的 Cocoa-heads 对retainCount.

** 我不想把它说得太宽泛,但是来自经验的具体提示或关于验证/调试保留和释放配对的文档可能在这里是合适的。

***在虚拟代码中;显然,公众无法访问 Apple 的实际代码。

0 投票
1 回答
12157 浏览

objective-c - 初始化属性,点表示法

在我的 init 方法中使用点表示法将保留属性初始化为 nil 是不是一个坏主意?

对于像这样的任何普通属性:

在我设置的 init 方法中说self.foo = nil。合成方法首先发布或自动发布foo(不完全确定底层实现)。foo在第一个 setter 或 getter 调用之前保证为 nil 吗?或者它会指向随机垃圾,除非我在foo = nil没有点符号的情况下明确设置?

0 投票
1 回答
325 浏览

python - ipython 和引用计数

ipython当我不期望它时,它似乎可能会保留对对象的引用。

考虑以下脚本 ( grc.py):

当我运行它时ipython

这是怎么回事?额外的两个参考来自哪里?

0 投票
1 回答
333 浏览

c++ - STLPort 的字符串实现是使用引用计数吗?

STLPort 是否通过引用计数机制实现字符串?

0 投票
1 回答
665 浏览

objective-c - Xcode 静态分析器和 copyWithZone

Xcode 4 静态分析器将此方法标记为具有过度释放的返回值,而事实并非如此。

有一个箭头从 return 关键字指向它后面的表达式,另一个从该表达式指向分析器警告。下面是静态分析:

  1. 方法返回一个具有 +1 保留计数的 Objective-C 对象
  2. 对象发送 -autorelease 消息
  3. 对象作为拥有引用返回给调用者(单个保留计数转移给调用者)
  4. 对象以 +0(非拥有)保留计数返回给调用者
  5. 具有 +0 保留计数的对象返回给调用者,其中预期 +1(拥有)保留计数

是静态分析器不正确还是这段代码有问题?


根据要求,-initWithURL:postString:方法:


即使在清理和重建项目之后,我也会继续收到此警告。

更新:升级到 Xcode 4.2 后,Xcode 静态分析器不再将此标记为问题。

0 投票
1 回答
221 浏览

programming-languages - 使用指针算法的语言中的引用计数 GC

我想知道是否可以在允许指针运算的语言中实现基于引用计数的 GC。例如(这是伪 C),

在这种情况下,编译器是否有可能正确管理内存?