Сохраните ссылку на сегментированный элемент управления в вашем контроллере представления (т.е. определите tabs
как свойство в заголовочном файле контроллера представления).
Переопределить метод -viewWillDisappear:
контроллера представления и удалить там сегментированный элемент управления из панели навигации, используя метод -removeFromSuperview
элемента управления.
EDIT
Вы все равно alloc-init
свой сегментированный элемент управления tabs
в -viewDidLoad
. Вам просто нужно установить свойство retain для tabs
в заголовке контроллера представления и переместить оператор release
элемента управления в метод dealloc
контроллера представления.
Прочтите раздел «Свойства» этого Обучающего файла Objective-C , чтобы узнать о свойствах и их настройке.
Способ переопределения метода заключается в следующем:
- (ReturnClass) methodNameToOverride:args {
[super methodNameToOverride:args];
// your code goes here...
}
В случае -viewWillDisappear:
этот метод вызывается, когда ваш контроллер представления собирается исчезнуть, например, когда он выталкивается из стека навигации. Это отличное место для размещения кода, который управляет очисткой элементов, относящихся к контроллеру вида, например, вашего сегментированного элемента управления:
- (void) viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[tabs removeFromSuperview];
}
РЕДАКТИРОВАТЬ 2
Если ваша собственность установлена следующим образом:
@property (nonatomic, retain) UISegmentedControl *tabs;
тогда вы собираетесь retain
все, что вы установите self.tabs
равным.
Ваш код здесь:
self.tabs = [[UISegmentedControl alloc] initWithItems:...];
создаст утечку памяти, потому что вы сохраняете этот объект: [[UISegmentedControl alloc] init]
- но вы никогда не освободите [[UISegmentedControl alloc] init]
. Это плохо.
Вместо этого используйте autorelease
справа, т. Е .:
self.tabs = [[[UISegmentedControl alloc] initWithItems:...] autorelease];
Свойство tabs
сохраняет свою собственную ссылку на инициализированный сегментированный элемент управления. Этот инициализированный сегментированный контроль сам по себе освобождается должным образом на более позднем этапе Так что утечки памяти больше нет.