【问题标题】:Possibility of ARC overflow in Swift?Swift 中 ARC 溢出的可能性?
【发布时间】:2016-03-30 23:47:41
【问题描述】:

Swift 使用“自动引用计数”来释放不再引用且不再需要的对象。 Swift 语言指南 [1] 声明如下:

每次创建类的新实例时,ARC 都会分配一块内存来存储有关该实例的信息。此内存保存有关与该实例关联的任何存储属性的 [...] 值的信息。

我假设引用计数被存储为一个整数。 那么引用计数器是否会发生溢出? 如果是这种情况,这会对我的程序产生什么影响,仍然被其他人引用的对象会被简单地释放吗?

举个例子:如果计数器是一个无符号的 2 字节整数,这将使对对象的引用上限(同时仍然具有正确的引用计数)在 130k 左右。一旦达到上限并且对象再次被引用,这将使计数器加一,再次将其设置为 0。

[1]https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html

【问题讨论】:

  • 4294967296 引用?哇兹。你甚至......有足够的内存来做那件事吗?
  • 我知道这个问题是一个相当假设的问题,但这种情况下的行为会让我感兴趣;)

标签: swift garbage-collection automatic-ref-counting reference-counting


【解决方案1】:

NSObject 的 retainCount 是 64 位操作系统上的 64 位无符号整数。它是 32 位操作系统上的 32 位无符号整数。这也是地址空间的大小,因此不可能创建对单个对象的那么多引用并溢出计数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-22
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 2019-04-06
    • 2018-02-28
    • 1970-01-01
    • 2016-04-22
    相关资源
    最近更新 更多