Вот еще один совет (случилось со мной):
tl; dr: Посмотрите также на переменные экземпляра вашего класса, а не только на свойства класса.Вы размещаете какую-либо переменную экземпляра в коде, а не устанавливаете ее на nil
позже?
У меня был класс с кучей свойств (@property (nonatomic, strong)
и @property (nonatomic, weak)
) в его заголовочном файле.Я прокомментировал эти свойства одно за другим, чтобы посмотреть, изменит ли это что-нибудь.Это не так.Основной класс все еще не был освобожден.Таким образом, проблема была не в свойствах.
После этого я посмотрел на переменные экземпляра.У меня была одна переменная экземпляра (которая была UIViewController
), которую я создал на viewDidLoad
.Этот никогда не получил dealloc-ed!
Когда я удалил эту переменную, конечно, мой основной класс назывался dealloc.
Так как этот класс не был dealloc-Эд, мой основной класс тоже не был освобожден.Перемещение этой переменной экземпляра как свойства решило проблему для меня.
Вопрос: Хотя я не уверен, почему это происходит.Имеет ли операционная система лучший контроль над свойствами класса, чем над переменными экземпляра?Кажется немного странным, что родительский класс, который содержит переменную экземпляра, не освобождается из-за его переменной экземпляра.