Форум программистов, компьютерный форум, киберфорум
Наши страницы
Objective-C
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.69/16: Рейтинг темы: голосов - 16, средняя оценка - 4.69
andrei0077
6 / 6 / 0
Регистрация: 23.06.2011
Сообщений: 92
1

dealloc

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

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

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


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

Или воспользуйтесь поиском по форуму:
21
Fooly
21 / 17 / 4
Регистрация: 26.03.2012
Сообщений: 147
05.01.2013, 13:02 21
Не буду пложить темы. Подскажите плз, правильно ли я понял. Когда количество ссылок на объект равняется 0 - вызывается метод dealloc. Но в этом методе же прописан release для всех объектов, и получается, что когда количество ссылок на какой-то объект равно 0, вызывается dealloc и в результате количество ссылок уменьшается на 1 для всех объектов? Не пойму этой ситуации. Разберусь с этим - пойму зачем писать [super dealloc] и для чего мы релизим все объекты супер класса.
0
Vorona
Peace 2 all shining faces
672 / 534 / 84
Регистрация: 05.03.2010
Сообщений: 1,283
05.01.2013, 21:26 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 родителя?
1
05.01.2013, 21:26
Ответ Создать тему
Опции темы

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