Итак, я загружаю файл XIB, и он содержит набор UIBarButtonItems
. Некоторые из предметов используются, когда вызывается viewDidLoad:
.
@interface MyViewController : UIViewController {
IBOutlet UIBarButtonItem *addButton;
IBOutlet UIBarButtonItem *editButton;
IBOutlet UIBarButtonItem *doneButton;
}
// NB: There are no properties retaining anything.
@end
@implementation MyViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSArray *initialToolbarItems =
[[NSArray alloc] initWithObjects: addButton, editButton, nil];
self.toolbarItems = initialToolbarItems;
[initialToolbarItems release];
}
- (void)dealloc {
[super dealloc];
// Nothing else to do here since we are not retaining anything.
// … or are we? <insert dramatic music here>
}
@end
Если я помещаю вышеупомянутый ViewController в UINavigationController, все выглядит нормально, все IBOutlets назначаются и ведут себя, как и ожидалось.
В тот момент, когда я вытаскиваю ViewController из стека навигации Утечки инструментов говорят мне, что я пропускаю UIBarButtonItem
. Горе мне!
Если я изменю dealloc:
на
- (void)dealloc {
[doneButton release];
[super dealloc];
}
утечки не происходит. То же самое происходит, если я использую doneButton
в viewDidLoad:
NSArray *initialToolbarItems =
[[NSArray alloc] initWithObjects: addButton, editButton, doneButton, nil];
Мой вопрос: почему мои IBOutlet
протекают, когда я им не пользуюсь. Я не сохраняю это в любой момент. Загрузчик NIB должен владеть объектом, верно?