Это может быть проблемой из-за недостатка понимания правил управления памятью Какао, особенно в отношении владения объектами.В зависимости от того, как вы создаете объект, он принадлежит вам или кому-то другому.Нужно ли вам освобождать объект, зависит от того, являетесь ли вы владельцем объекта (вы либо сохранили его, либо создали его, используя метод, начинающийся с alloc
, new
, copy
или mutableCopy
),Подробнее о правилах можно прочитать в документации Apple по управлению памятью .
Кроме того, вам следует обратить внимание на любые правила, касающиеся свойств.Как упоминалось в sergio, если свойство указывает, что оно сохраняет объект, оно будет обрабатывать вызовы retain
и release
при назначении.Так, например, если вы выделяете что-то, используя alloc
, у вас есть этот объект.Если вы затем назначаете его свойству, которое сохраняет объект, вы и свойство сохраняете объект, поэтому в зависимости от того, что вы делаете позже, вы также можете освободить объект, чтобы отказаться от владенияобъект.
Установка простого указателя на nil
не освобождает объект и не считается как release
.Таким образом, в зависимости от того, как вы создаете объект, вы должны знать, нужно ли вам освобождать объект или нет.Приведенная выше документация включает в себя примеры, которые также должны помочь вам в этом разобраться.Одно предостережение: этот тип изменений изменяется с автоматическим подсчетом ссылок, поскольку вы не выполняете любую обработку retain
, release
и т. Д., И компилятор по большей части вступает во владение, но есливы не используете ARC, пока не беспокойтесь об этом (но позаботьтесь об этом позже).