hel*_*imi 4 memory-leaks memory-management uiscrollview uiimageview ipad
我有内存管理这个大问题.
问题:
我有一个UIScrollView,我有一个包含24条路径到图像的数组,我想在UIScrollView启用分页的情况下显示它们.
所有图像的大小均为1024x748(具有状态栏的iPad横向分辨率),文件类型为jpg或png.
我正在使用延迟加载只是为了不超过内存时viewDidLoad.而且我将使用PageControl从Apple的延迟加载样本开始.虽然我用的是UIImageViews代替UIViews.
所以我的问题是,当我滚动到第三个图像时,我想从中删除第一个图像UIScrollView并释放其内存.因为我进一步滚动,更多的内存正在耗尽.当我在UIScrollView中页面并加载并添加新图像时,使用了大约5000kb的内存,当我进入unloadPage:(见下文)时,没有任何内容被释放.我只是"做错了"?
如何UIImageViews正确释放和删除?
(我正在加载UIImages initWithContentsOfFile:)
这是我的代码:
@interface SlideViewController : UIViewControllerExtended <UIScrollViewDelegate> {
    ScrollViewController *slider;
    IconView *currentChapter;
    NSMutableArray *chapters;
    NSMutableArray *views;
    UIImageView *controller;
}
延迟加载功能:
- (void) loadImageToScrollView:(NSInteger)chapter withPage:(NSInteger)page {
    if (page < 0) return;
    if (page >= chapterCount) return;
    if([views objectAtIndex:page] != [NSNull null]) return;
    NSMutableArray *all = [[currentChapter getImages] copy];
    if(!([[all objectAtIndex:page] rangeOfString:@".mp4"].length > 0)) {
        controller = [views objectAtIndex:page];
        if((NSNull *)controller == [NSNull null]) {
            NSArray *paths = [[all objectAtIndex:page] componentsSeparatedByString:@"."];
            NSString *name = [[NSString alloc] initWithString:[paths objectAtIndex:0]];
            NSString *ending = [[NSString alloc] initWithString:[paths objectAtIndex:1]];
            NSString *file = [[NSString alloc] initWithFormat:@"%@", [[NSBundle mainBundle] pathForResource:name ofType:ending]];
            UIImageView *tempImage = [[UIImageView alloc] initWithFrame:CGRectMake(page * 1024, 0, 1024, 768)];
            UIImage *img = nil;
            img = [[UIImage alloc] initWithContentsOfFile:file];
            [tempImage setImage:img];
            [tempImage setTag:page];
            self.controller = tempImage;
            [tempImage release];
            [slider addSubview:controller];
            [views replaceObjectAtIndex:page withObject:controller];
            [name release];
            [ending release];
            [file release];
        }
    }
    [all release];
}
卸载视图方法(似乎不起作用):
- (void) unloadPage: (int) page {
    if(page < 0) return;
    if(page >= chapterCount) return;
    if((NSNull *)[views objectAtIndex:page] != [NSNull null]) {
        UIImageView *viewToDelete = [views objectAtIndex:page];
        [viewToDelete removeFromSuperview];
        [views replaceObjectAtIndex:page withObject:[NSNull null]];
    }
}
通过观看WWDC2010上的#104视频会话解决了该问题.哪个可以在Apple Developer网站上找到.
因此,如果在加载大图像时遇到内存泄漏问题,请查看.这真的非常有用.
| 归档时间: | 
 | 
| 查看次数: | 4386 次 | 
| 最近记录: |