我使用数据模型来存储 2 个对象:视频、图像。视频仅包含字符串属性,图像具有 2 个“二进制数据”属性。
开始时 2 个二进制数据属性位于视频对象中。但是所有视频都是在 UITableView 初始化期间加载的。对于 400 个视频,二进制数据代表 20 Mo,所以想象一下 4000 个视频......
现在使用 2 个对象,UITableView 加载效果很好。我在方法中需要时加载二进制数据:tableView:cellForRowAtIndexPath
但是现在我滚动到列表中的次数越多,内存就越长:(
看看我的方法:
- (UITableViewCell *)tableView:(UITableView *)myTableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"videoCell";
Video *theVideo = (Video *)[[self fetchedResultsController] objectAtIndexPath:indexPath];
VideoCellViewController *cell = (VideoCellViewController *)[myTableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"VideoCellView" owner:self options:nil];
cell = editingTableViewCell;
self.editingTableViewCell = nil;
}
cell.video = theVideo;
return cell;
}
以及 VideoCellViewController 中的 setvideo 方法
- (void)setVideo:(Video *)newVideo {
if (newVideo != video) {
[video release];
video = [newVideo retain];
}
NSData *imageData = [video.allImages valueForKey:@"thumbnailImage"];
UIImage *uiImage = [[UIImage alloc] initWithData:imageData];
smallImage.image = uiImage;
nameLabel.text = video.displayName;
[uiImage release];
}
即使没有设置smallImage,我也有记忆问题。如果我加载图像对象,它永远不会释放。
我尝试了很多解决方案来释放内存但没有成功......(didTurnIntoFault,release,CFRelease......)在性能工具中,我可以将我的二进制数据视为CFData。
我使用了很多 iPhoneCoreDataRecipes 和 PhotoLocations 示例。
我需要帮助来清理我的记忆;)
谢谢
塞缪尔