我有一个包含15个元素的NSMutableArray,所有元素都是字符串。这些字符串指向本地存储在应用程序中的图像名称(大约每个图像的大小为640x640)。我正在UICollectionView中显示这些图像数组。
当我重新加载collectionView以显示这些图像时,我的内存使用量会急剧上升,因为显示大型png图像(尽管其占用空间比我预期的要大得多)。
真正的问题在于,这些图像所使用的内存永远不会被释放。因此,即使我从数组中删除了所有对象,删除了collectionView并将所有内容设置为空,也没有释放任何内存。
为什么会这样?如果我删除这些对象并删除ViewController,我希望我的内存能够返回到原始水平。
更新:代码片段
ViewController.m
当我重新加载collectionView以显示这些图像时,我的内存使用量会急剧上升,因为显示大型png图像(尽管其占用空间比我预期的要大得多)。
真正的问题在于,这些图像所使用的内存永远不会被释放。因此,即使我从数组中删除了所有对象,删除了collectionView并将所有内容设置为空,也没有释放任何内存。
为什么会这样?如果我删除这些对象并删除ViewController,我希望我的内存能够返回到原始水平。
更新:代码片段
ViewController.m
@implementation ViewController
static NSString *CellIdentifier = @"photoCell";
-(void)viewDidLoad{
[super viewDidLoad];
self.photoCollectionView = [[UICollectionView alloc] initWithFrame:CGRectMake(0,0, self.view.frame.size.width, 320) collectionViewLayout:self.photoSpringFlowLayout];
[self.photoCollectionView setDataSource:self];
[self.photoCollectionView setDelegate:self];
[self.view addSubview:self.photoCollectionView];
[self.photoCollectionView registerClass:[PhotoPreviewCell class] forCellWithReuseIdentifier:CellIdentifier];
self.imagesAray = [[NSMutableArray alloc] initWithObjects:@"photo1", @"photo2", @"photo3", @"photo4", @"photo5", @"photo6", @"photo7", @"photo8", @"photo9", @"photo10", @"photo11", @"photo12", @"photo13", @"photo14", @"photo15", nil];
[self.photoCollectionView reloadData];
}
#pragma mark - UICollectionView Methods
-(NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView{
return 1;
}
-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
return self.imagesArray.count;
}
-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
PhotoPreviewCell *cell = (PhotoPreviewCell*)[collectionView dequeueReusableCellWithReuseIdentifier:CellIdentifier forIndexPath:indexPath];
NSString *imageName = self.imagesArray[indexPath.row];
[cell.photoImage setImage:[UIImage imageNamed:imageName]];
return cell;
}
PhotoPreviewCell.m
@implementation PhotoPreviewCell
-(id)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if(self){
self.photoImage = [[UIImageView alloc] init];
self.photoImage.frame = CGRectMake(0, 0, 160, 160);
self.photoImage.contentMode = UIViewContentModeScaleAspectFit;
[self.contentView addSubview:self.photoImage];
}
return self;
}