Пару возможных причин прийти на ум:
- Apple, имел в виду, чтобы преобразовать этот образец в АРК, и забыл о пропущенных или позже
autorelease
вызова в том же фрагменте кода.
- Ивар, который получает
session
в конце метода init
, объявлен @property (assign)
, и поэтому они намеренно хотели сохранить его на время. Если я правильно помню, это плохая практика - они должны иметь autorelease
d сеанс и объявили @property (retain)
.
- Они передают
release
session
позже. Не строго неудовлетворительная практика, но, конечно, запутанная и трудная для чтения, и может привести к ошибке в обслуживании позже (когда кто-то теряет след баланса retain
- release
).
- Это действительно ошибка. Хороший улов!
В любом случае, вы правы в том, что это несколько противоречит хорошей практике управления памятью. Трудно сказать наверняка, однако, есть ли окончательная причина, по которой он не выпущен.