Я действительно не вижу аргументов, почему retain будет вызываться после освобождения.Однако я мог бы найти аргументы, почему бы не выпустить его первым.
Если вы сначала отпустите старый объект, может случиться так, что новый объект будет освобожден и освобожден от него.Это была бы очень специфическая ситуация, но это могло произойти.Очевидно, не с NSNumber
, но подумайте, например, что это UIView
, а новое значение - это подпредставление старого значения.Теперь старое значение имеет ссылку на новое значение и сохраняет его.Освобождая старое значение, вы, несомненно, уменьшаете счет сохранения нового значения.Для того, чтобы количество сохранений упало до нуля и чтобы объект был освобожден, должна быть также особая ситуация, но, опять же, это может иметь смысл.
Итак, в общем, когда вы получаете объект, вы должны сначала сохранить его.После этого вы можете начать изменять любые другие данные.