5

Swift использует «Автоматический подсчет ссылок», чтобы освободить объекты, которые больше не ссылаются и, следовательно, больше не нужны. языка руководство Swift [1] говорится следующее:Возможность переполнения ARC в Swift?

Каждый раз, когда вы создаете новый экземпляр класса, ARC выделяет блок памяти для хранения информации об этом случае. В этой памяти хранится информация о [...] значениях любых хранимых свойств, связанных с этим экземпляром.

Я предполагаю, что счетчик ссылок хранится как целое число. Может ли контрольный счетчик пострадать от переполнения? Если это так, какие последствия у меня будет в моей программе, будут ли объекты, все еще получающие ссылку другими, просто освобождаются?

В качестве примера: если счетчик был, скажем, беззнаковым 2 байтовым целым, это поставило бы верхний предел ссылок на объект (при все еще правильном подсчете ссылок) около 130 тыс. Как только этот верхний предел достигнут, и объект получит ссылку еще раз, это увеличит счетчик на единицу, снова установив его в 0.

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

+3

4294967296 ссылки? Wowz. У вас даже есть достаточно памяти для этого? – Zizouz212

+0

Я знаю, что вопрос довольно гипотетический, поведение в этом случае все равно интересовало бы меня;) – Benjamin

ответ

7

retainCount NSObject представляет собой 64-битовое целое число без знака на 64-битных ОС. И это 32-разрядное целое число без знака в 32-битных ОС. Это также размер адресного пространства, поэтому невозможно создать много ссылок на один объект и переполнить счет.

Смежные вопросы