Используя пример PhotoScroller от Apple, для повторного использования памяти, выделенной для представлений, я не могу освободить память после того, как число сохранений достигнет 0. Вот мой код для лучшего понимания:
Эта часть является выдержкой из PhotoScroller
PhotoViewController.m
- (void)configurePage:(ImageScrollView *)page forIndex:(NSUInteger)index
{
page.index = index;
page.frame = [self frameForPageAtIndex:index];
[page displayPage:index];
}
ImageScrollView.h
@interface ImageScrollView : UIView
{
UIViewController *vc;
NSUInteger index;
}
@property (assign) NSUInteger index;
- (void)displayPage:(int)indice;
@end
ImageScrollView.m
- (void)dealloc
{
[vc release];
[super dealloc];
}
- (void)displayPage:(int)indice
{
//remove previous view
[vc.view removeFromSuperview];
[vc release];
vc = nil;
//NSLog(@"vc retain %i", [vc retainCount]);
// make a new viewController for the new page
Class clss = NSClassFromString([NSString stringWithFormat:@"page_0%i", indice + 1]);
vc = [[clss alloc] initWithNibName:[NSString stringWithFormat:@"page_0%i", indice + 1] bundle:nil];
[self addSubview:vc.view];
}
Классы "page_0x" являются UIViewControllers. Пока нет ничего, кроме UIImageView на XIB.
Пример страницы_01:
@implementation page_01
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
// Overriden to allow any orientation.
return YES;
}
- (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 {
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}
- (void)dealloc {
[super dealloc];
}
@end
Объем памяти достигает 148 МБ на устройстве. Дает мне предупреждение уровня памяти 1, затем освобождает память. Опускается до 95 МБ. Продолжает идти вверх и вниз.