Отсутствует релиз в Apple Code? - PullRequest
0 голосов
/ 25 января 2012

В этом коде Apple: http://developer.apple.com/library/ios/#qa/qa1702/_index.html

Я вижу, что сеанс, выделенный в начале метода init, не освобожден.

Почему? Есть ли причина этому?

1 Ответ

2 голосов
/ 25 января 2012

На ум приходит пара возможных причин:

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

В любом случае, вы правы в том, что это несколько несовместимо с хорошими практиками управления памятью. Однако трудно сказать наверняка, есть ли определенная причина, по которой он не выпущен.

...