После прочтения:
Управление памятью контроллера представления в Objective-c
и
Действительно ли addSubview UIView сохраняет представление?
Я написал следующий код для переключения подпредставления:
@synthesize switchableView, viewSelector, currentSubview;
//...
if(switchableView.subviews.count != 0)
[[switchableView.subviews objectAtIndex:0] removeFromSuperview]]
self.currentSubview = (veiwSelector.selectedSegmentIndex == 0) ?
[ViewA new] : [ViewB new];
[switchableView addSubview:currentSubview.view];
//[currentSubview release]; //<---crashes if I uncomment this line
Кажется, все работает нормально, если я закомментирую эту строку релиза, но я не могу понять, почему. Вот как я понимаю, что происходит, и, возможно, кто-то может сказать мне, где я ошибаюсь:
Итак, давайте рассмотрим currentView:
A распределяется по «новому» сообщению - сохранить счет = A: 1
A удерживается установщиком - оставьте счет = A: 2
Представление А получает (предположительно) сохранение - сохранить счет = A: 2.1
в следующий раз через ...
Подвид А получает количество освобожденных = A: 2
B распределяется по «новому» сообщению - сохранить счет = B: 1, A: 2
A автоматически высвобождается установщиком - B: 1, A: 1
B удерживается установщиком - B: 1, A: 1
от А ничего не избавится?
Так я должен изменить свой код, или я ошибаюсь, как управление памятью работает на этом языке ... или оба? -