Использование ARC не означает, что объекты никогда не получат метод release
или что они никогда не будут освобождены.Это просто означает, что вам не нужно делать явные вызовы retain
и release
, и это происходит автоматически.
Проблема в том, что ваши объекты освобождаются, потому чтоникто не владеет ими.Ваша конкретная проблема заключается в том, что SharedMethods
освобождается, потому что он не сохраняется, но я не могу показать вам, как именно это происходит, потому что вы не опубликовали соответствующий код.
Однако я могу показатьвы, что вы не управляете своим Connection
должным образом, и, надеюсь, это поможет вам понять, что вы делаете неправильно с SharedMethods
.
Таким образом, вы создаете Connection
с помощью alloc init
, чтос кодом retain-release это даст счет сохранения 1, но так как вы больше не используете ARC, это не очень важно.Если какой-либо другой объект не подтвердит владение Connection
, ARC автоматически вставит вызов на release
, чтобы вернуть счетчик удержания обратно в 0 (это похоже на то, как если бы ARC автоматически вставил autorelease
).
Поскольку вы не присваиваете Connection
свойству strong
или retain
и не помещаете его в коллекцию, никакой другой объект не претендует на владение им.Поэтому, как только выполнение достигнет конца области действия, в которой определена переменная conn
, оно будет освобождено и освобождено.
Таким образом, в ARC, как и в коде ручного сохранения и выпуска, вам все равно необходимоубедитесь, что объекты принадлежат какому-то другому объекту, чтобы они оставались рядом.Единственное отличие состоит в том, что вам не нужно вручную вызывать retain
и release
, вам просто нужно подумать о графе владения объектом - какому объекту принадлежит другой объект - и убедиться, что любой объект вы хотитеПалка вокруг принадлежит другому объекту.
Поэтому, чтобы повторить, вам нужно убедиться, что SharedMethods
принадлежит другому объекту.