我有一个小型应用程序,用于在 UIScroller 中以与 Photo 应用程序类似的方式显示多个 UIImageView。我有一个 TableView,当我选择一个项目时,它会解析照片的 XML 文档(添加到数组中)并添加一个 UIViewController 来显示图像。
问题是我有一个选项卡栏控制器,单击选项卡栏项目后,删除显示图像的视图并释放所有已用内存后,该控制器应返回 TableView。问题是我不知道如何实现这一目标。是否缺乏对记忆规则的理解我不知道。
这是我遇到问题的过程。
表视图控制器
这在 parserDidEndDocument: 之后调用。从标签栏项目调用 backToMenu。
@interface AlbumsViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {
AlbumViewController *albumViewController;
}
@property (nonatomic, retain) AlbumViewController *albumViewController;
- (void)displayPhotos {
albumViewController = [[AlbumViewController alloc] initWithNibName:@"AlbumView" bundle:nil];
albumViewController.parentView = self;
albumViewController.arrPhotos = self.arrCurrentSetOfPhotos;
[self.view addSubview:albumViewController.view];
[albumViewController populateScroller];
}
- (void)backToMenu {
[albumViewController.view removeFromSuperview];
}
相册视图控制器
这是一个包含 UIScroller 和 UIPageControl 的 UIViewController。它添加了几个 ImageViewController。
- (void)populateScroller {
imagesScroller.pagingEnabled = YES;
imagesScroller.contentSize = CGSizeMake(imagesScroller.frame.size.width * [self.arrPhotos count], 380);
imagesScroller.showsHorizontalScrollIndicator = NO;
imagesScroller.showsVerticalScrollIndicator = NO;
imagesScroller.scrollsToTop = NO;
imagesScroller.delegate = self;
imagesScroller.backgroundColor = [UIColor blackColor];
pageControl.numberOfPages = [self.arrPhotos count];
pageControl.currentPage = 0;
pageControl.backgroundColor = [UIColor blackColor];
NSMutableArray *controllers = [[NSMutableArray alloc] init];
for (int i = 0; i < [self.arrPhotos count]; i++) {
CGRect frame = imagesScroller.frame;
frame.origin.x = frame.size.width * i;
frame.origin.y = 0;
NSString *strImagePath = [self.arrPhotos objectAtIndex:i];
ImageViewController *imageViewController = [ImageViewController alloc];
imageViewController.localImage = YES;
[imageViewController initWithPhotoName:strImagePath];
[controllers addObject:imageViewController];
imageViewController.view.frame = frame;
[imagesScroller addSubview:imageViewController.view];
[imageViewController release];
}
self.viewControllers = controllers;
[controllers release];
}
图像视图控制器
这有一种方法。它添加了一个名为 ImageView 的子类 UIView,用于处理添加 UIImageView。
- (void)loadImage {
NSString *strRootURL = @"http://www.marklatham.co.uk";
CGRect rect = CGRectMake(0.0, 0.0, 320.0, 480.0);
ImageView *imageView = [ImageView alloc];
imageView.strURL = [strRootURL stringByAppendingString:self.strThisPhoto];
imageView.strTmpPrefix = (self.localImage) ? @"_tmp_rockphotothumb_" : @"_tmp_rockphotolarge_";
[imageView initWithFrame:rect];
[self.view addSubview:imageView];
[imageView release];
}
backToMenu 函数应该删除/释放 AlbumViewController 并在所有子视图上调用 delloc 以释放已使用的内存。
哪里出错了?任何帮助,将不胜感激。
谢谢。