Гипотеза:
Первый NSObject выпускается немедленно после получения идентификатора (оценивается как часть левой части ==), а второй NSObject «занимает его место. ”И ему назначается тот же внутренний адрес-aka-ID, так что следующий ObjectIdentifier возвращает тот же идентификатор.
Выпуск не может произойти в случае NSObject () == NSObject (), поскольку объект (не идентификатор из оценки) используется в самом операторе сравнения. Освобождение также не может произойти, если объект привязан к локальной переменной.
Гипотеза может быть аргументирована, учитывая следующее:
let x1 = ObjectIdentifier(NSObject()) // NSObject #1 released
let x2 = ObjectIdentifier(NSObject()) // Do we get same ID here?
print("x", x1, x2)