【发布时间】:2011-01-08 08:11:16
【问题描述】:
我使用数据模型来存储 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 示例。
我需要帮助来清理我的记忆;)
谢谢
塞缪尔
【问题讨论】:
-
editingTableViewCell来自哪里?
标签: iphone database memory-management core-data nsdata