Почему переменная экземпляра движка объекта car2
совпадает с аргументом newEngine
?
Вопрос в том, что произойдет , если выназывается
[aCar setEngine: anEngine];
... в то время, когда anEngine
является тем же объектом , что уже engine
из aCar
.Предположим, вы сделали это.Тогда первое, что делает реализация setEngine
, это освобождает существующий engine
.Но если этот объект также newEngine
, то вы теперь случайно сбросили входящий параметр, прежде чем получили возможность назначить его для ивара и сохранить его.
Урок заключается в том, чтовам нужно сохранить входящий параметр сначала и , затем освободить существующий engine
- на тот случай, если это один и тот же объект.Или, что еще лучше, проверьте , являются ли они одним и тем же объектом, как я советую в своей книге:
http://www.apeth.com/iOSBook/ch12.html#_memory_management_of_instance_variables_non_arc
Сказав все это, я настоятельно рекомендуюты выбрасываешь эту книгу.Это слишком старо. Никто больше не пишет такой код.В настоящее время у нас есть ARC, которая делает все это автоматически , именно так, что вам не нужно.В современном Objective-C высказывание retain
и release
на самом деле незаконно .Таким образом, вы узнаете о том, что вы никогда не будете делать на самом деле, что глупо.Вы изучаете мертвый язык.Это весело, но не полезно.