Ваш IBOutlets, вероятно, @properties
. Если они есть, и у вас есть retain
в качестве атрибута, то вам нужно выпустить в -dealloc
Другими словами:
@interface MyViewController : UIViewController {
IBOutlet UITableView *myTable;
}
@property (nonatomic, retain) IBOutlet UITableView *myTable;
@end
Вам придется набрать [myTable release];
в вашем деле.
Если вы создаете новое приложение на основе навигации в XCode и смотрите appdelegate.h:
@interface Untitled1AppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
UINavigationController *navigationController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UINavigationController *navigationController;
@end
и dealloc для appdelegate.m:
- (void)dealloc {
[navigationController release];
[window release];
[super dealloc];
}
Ключевым моментом здесь являются такие строки:
@property (nonatomic, retain) IBOutlet UIWindow *window;
Если там есть удержание, это означает, что свойство «принадлежит» вашему коду, и вы должны его освободить.
Конечно, есть и другие способы, например, не объявлять IBOutlets как свойства или объявлять их как свойства без сохранения. Я считаю, что в большинстве случаев я предпочитаю, чтобы у них были сохраненные свойства, которые я затем должен явно освобождать. Примером этого является переключение с одного контроллера представления на другой. Поскольку один контроллер представления отклонен, его представления удалены, и они освобождены. Любые IBOutlet UILabels с этой точки зрения также будут освобождены, если я не сохраню их. Это означает, что когда я возвращаюсь к старому представлению, мне нужно пройти и сбросить свои метки и элементы управления до их последних значений, когда я мог бы легко сохранить их, если бы просто сохранил IBOutlet.