У меня проблемы с управлением памятью в приложении.Есть некоторые понятия, которые я не понимаю.Например, что не так с этим кодом?Как мне решить эту проблему?
CustomController.h:
@interface CustomController : UIViewController <UIScrollViewDelegate>
{
IBOutlet UIScrollView *scroll_view;
}
@property (nonatomic, retain) UIScrollView *scroll_view;
@end
CustomController.m:
@implementation CustomController
@synthesize scroll_view;
- (void)viewDidLoad
{
[self setup_content];
[super viewDidLoad];
}
- (void) setup_content
{
// Fill the scrollview with some subviews
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload
{
[scroll_view release];
scroll_view = nil;
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)dealloc
{
[scroll_view release];
[super dealloc];
}
@end
Использование:
CustomController *custom_controller = [[CustomController alloc] initWithNibName: @"CustomController" bundle: nil];
NSLog(@"Controller: %i", [custom_controller retainCount]);
NSLog(@"ScrollView: %i", [custom_controller.scroll_view retainCount]);
[controllersArray addObject: custom_controller];
NSLog(@"Controller: %i", [custom_controller retainCount]);
NSLog(@"ScrollView: %i", [custom_controller.scroll_view retainCount]);
[custom_controller release];
NSLog(@"Controller: %i", [custom_controller retainCount]);
NSLog(@"ScrollView: %i", [custom_controller.scroll_view retainCount]);
И вывод:
Controller: 1
ScrollView: 0
Controller: 2
ScrollView: 2
Controller: 1
ScrollView: 2
В этот момент, когда я удаляю контроллер из массива, потому что он мне больше не нужен, retainCount, который scrollView имеет в методе dealloc контроллера, равен 2, а памятьне освобождается (scrollView имеет много uiimageviews, которые не выпускаются).Кто-нибудь может помочь, пожалуйста?
Редактировать:
Наконец проблема заключалась в том, что представление контроллеров было сохранено навигационным контроллером.Я использовал массив контроллеров в качестве стека для пользовательской навигации.Во всплывающем окне я удалял контроллер из массива, однако навигационный контроллер все еще сохранял представление.Удаление его из superview решило проблему, и теперь мой scrollView и все подпредставления, которые он имеет, были выпущены правильно!Спасибо всем!