Форум программистов, компьютерный форум CyberForum.ru

Objective-C

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.73
andrei0077
6 / 6 / 1
Регистрация: 23.06.2011
Сообщений: 92
#1

dealloc - Objective-C

06.09.2012, 10:41. Просмотров 2717. Ответов 21
Метки нет (Все метки)

Добрый день! У меня такой вопрос. В документации написано, что в методе dealloc нужно освобождать все объекты, которые входят в класс. Но по исходникам я заметил, что некоторые объекты не освобождаются, например CGFloat и CGSize. Хочу прояснить для себя этот момент, какие именно нужно освобождать в dealloc, а какие нет? Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2012, 10:41     dealloc
Посмотрите здесь:

Не вызывается dealloc в UIViewController при popViewControllerAnimated - Objective-C
Здравствуйте! есть такой код @interface MainController () @property (strong,nonatomic) Model *model; @property...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Fooly
21 / 17 / 1
Регистрация: 26.03.2012
Сообщений: 147
05.01.2013, 13:02     dealloc #21
Не буду пложить темы. Подскажите плз, правильно ли я понял. Когда количество ссылок на объект равняется 0 - вызывается метод dealloc. Но в этом методе же прописан release для всех объектов, и получается, что когда количество ссылок на какой-то объект равно 0, вызывается dealloc и в результате количество ссылок уменьшается на 1 для всех объектов? Не пойму этой ситуации. Разберусь с этим - пойму зачем писать [super dealloc] и для чего мы релизим все объекты супер класса.
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,276
05.01.2013, 21:26     dealloc #22
https://developer.apple.com/library/...d/20000994-SW2

1. ну нет же, объект владеет объектами, которые определены в его классе и когда вызывается его dealloc, он просто освобождает свои члены-объекты класса:
- создали объект, он выделил память для своих членов;
- удалили объект, он освободил память от своих членов;

2. [super dealloc]; мы пишем затем, чтобы вызвать dealloc класса-родителя, потому что в objc мы как минимум наследуемся от NSObject. Поскольку метод dealloc мы переопределяем, то сами должны позаботиться о том, чтобы вызвался родительский метод и освободил память всех членов-объектов класса-родителя, от которого мы наследуемся.
Это обычный прием используемый при переопределении метода родительского класса, когда вы хотите сохранить его логику и добавить свою.

p.s.
Аналогичная ситуация при переопределении конструктора - мы должны вызвать конструктор родителя, чтобы он выполнил свою работу и выделил память для своих членов-объектов (потом добавляем свою логику), а в "деалоке" освобождаемся от них.
Если вы его не переопределяете, то он вызывается автоматически родителем т.к. это его метод и это очевидно, иначе топайте разбираться с ООП.

p.p.s
надеюсь вы понимаете, почему при переопределении конструктора мы сначала вызываем конструктор родителя, а потом добавляем свою логику,
а при переопределении dealloc мы сначала релизим "свои" объекты, а потом вызываем dealloc родителя?
Yandex
Объявления
05.01.2013, 21:26     dealloc
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru