Управление памятью в iOS Design Pattern с делегатом и родительским объектом - PullRequest
0 голосов
/ 17 октября 2011

Я изо всех сил стараюсь очень чисто решить проблему, связанную с перегрузкой памяти (управление).У меня есть серия представлений, которые включают другие представления, в моем проекте у меня есть такая ситуация:

MainView

| _PageView

| _CustomButton

Су так хорошо, легко, как торт.У CustomButton есть делегат (протокол) в нем по некоторым причинам, поэтому в PageView есть цикл for, который создает N CustomButtons, устанавливаем делегат как self в PageView (PageVew extension CustomButtonDelegate) и отпускаем кнопки, прикрепляя их как

{
CustomButton *customButton_ = [[CustomButton alloc] initWithFrame:CGRectMake(100.0,50+(i*55.0),200.0);
customButton.delegate = self;
[self addSubView:customButton_];
[customButton_ release];
}

так хорошо, снова хорошо.Кнопка будет нажата, PageView получить метод протокола, сделать код и вуаля, готово.Одна проблема заключается в том, что в какой-то момент MainView должен удалить PageView, поэтому в методе, который я вызываю

[pageView_ removeFromSuperview];
[pageView release], pageView_ = nil;

pageView_ = [PageView alloc] initWithFrame.....];

, я воссоздаю объект с другими данными для отображения.Я заметил, что PageView никогда не выпускается и не удаляется из памяти, потому что его retainCount - это ровно столько CustomButton, которое я создал внутри PageView, и, конечно же, присваиваем делегату self и one.Мой вопрос: каков самый чистый способ безопасно удалить все объекты и иметь возможность удалить PageView, освободить память (потому что я загружаю довольно большой объем данных для отображения в нем)?

Прямо сейчася делаю:

Создайте в PageView NSMutableArray, чтобы я CustomButton объекты в нем, и, прежде чем удалить PageView, я циклически повторяю его и устанавливаю делегат = ноль, а затем освобождаю каждый объект, после того как я освобождаюNSMutableArray (называемый "holder").

Но проблема в том, что если я захочу добавить больше объектов разных типов с другими протоколами, добавление в этот массив может привести к другим проблемам с сохранением объектов.

Где мне не хватает парней, знаний, поэтому мне нужно больше учиться (я уверен, что могу сказать) или мне нужно подойти с другим OOD?

Спасибо, ребята, я перегружен этой проблемойи мой мозг застрял в тесной дороге.:)

1 Ответ

3 голосов
/ 17 октября 2011

Похоже, что ваш CustomButton делегат является retain свойством CustomButton. Делегат должен быть свойством assign, а не retain или copy. Смотри здесь .

...