Я думаю, что вы немного запутались: в обоих ваших фрагментах вы создаете объект tempButton
, но затем назначаете его self.myButton
.В этот момент и tempButton
, и self.myButton
являются указателями на один и тот же объект.Теперь, предположительно, myButton
@property
, который вы используете, является сильным свойством, поэтому, присваивая ему tempButton
, вы увеличиваете количество сохранений, и, следовательно, в любой версии кода он будет иметь счет +1 в конце, и не будет освобожден.
Если, гипотетически, myButton
не является сильным свойством, то в вашем коде будет ошибка, и в обоих случаях tempButton
будет преждевременно освобожден и освобожден.Вот что произойдет в двух случаях:
В вашей первой версии, поскольку вы получаете tempButton
из чего-то другого, чем метод init
или copy
, он получает счет сохранения +1, но автоматически выпущен.В конце текущей итерации цикла выполнения авто-релиз запускается, в результате чего его счетчик удержаний становится равным 0 и вызывается его освобождение.
Во второй версии вы сначала получаете tempButton
со счетом сохранения 1, потому что он исходит из метода init
.Но позже вы явно освобождаете его, доводя его счет удержания до 0, после чего он немедленно освобождается.