Swift 中是否存在 ARC 溢出?
Possibility of ARC overflow in Swift?
Swift 使用 "Automatic Reference Counting" 释放不再被引用因此不再需要的对象。
Swift 语言指南 [1] 声明如下:
Every time you create a new instance of a class, ARC allocates a chunk of memory to store information about that instance. This memory holds information about [...] values of any stored properties associated with that instance.
我假设引用计数存储为整数。
引用计数器是否会溢出?
如果是这种情况,这会对我的程序产生什么影响,仍然被其他人引用的对象是否会被释放?
举个例子:如果计数器是一个无符号的 2 字节整数,那么对象的引用上限(同时仍具有正确的引用计数)将达到 130k 左右。一旦达到上限并且对象再次被引用,这将使计数器递增 1,再次将其设置为 0。
NSObject 的 retainCount 是 64 位 OS 上的 64 位无符号整数。它是 32 位 OS 上的 32 位无符号整数。这也是地址的大小 space,因此不可能创建那么多对单个对象的引用并溢出计数。
Swift 使用 "Automatic Reference Counting" 释放不再被引用因此不再需要的对象。 Swift 语言指南 [1] 声明如下:
Every time you create a new instance of a class, ARC allocates a chunk of memory to store information about that instance. This memory holds information about [...] values of any stored properties associated with that instance.
我假设引用计数存储为整数。 引用计数器是否会溢出? 如果是这种情况,这会对我的程序产生什么影响,仍然被其他人引用的对象是否会被释放?
举个例子:如果计数器是一个无符号的 2 字节整数,那么对象的引用上限(同时仍具有正确的引用计数)将达到 130k 左右。一旦达到上限并且对象再次被引用,这将使计数器递增 1,再次将其设置为 0。
NSObject 的 retainCount 是 64 位 OS 上的 64 位无符号整数。它是 32 位 OS 上的 32 位无符号整数。这也是地址的大小 space,因此不可能创建那么多对单个对象的引用并溢出计数。