J'utilise un modèle de données pour stocker deux objets : Vidéo, Images. La vidéo ne contient que des attributs de type chaîne et les images ont 2 attributs de type "données binaires".
Au départ, les 2 attributs de données binaires se trouvaient dans l'objet vidéo. Mais toutes les vidéos sont chargées pendant l'initialisation de UITableView. Pour 400 vidéos les données binaires représentent 20 Mo, alors imaginez avec 4000 vidéos...
Maintenant avec 2 objets le chargement de UITableView fonctionne bien. Je charge les données binaires quand c'est nécessaire dans la méthode : tableView:cellForRowAtIndexPath
Mais maintenant, plus je fais défiler la liste, plus la mémoire grandit :(
regardez ma méthode :
- (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;
}
Et la méthode setvideo dans VideoCellViewController
- (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];
}
Même sans définir le smallImage, j'ai des problèmes de mémoire. Si je charge l'objet image, il n'est jamais libéré.
J'ai essayé plusieurs solutions pour libérer la mémoire sans succès...( didTurnIntoFault, release, CFRelease...) Dans l'outil de performance, je peux voir mes données binaires comme CFData.
J'utilise beaucoup l'échantillon iPhoneCoreDataRecipes et PhotoLocations.
J'ai besoin d'aide pour nettoyer ma mémoire ;)
Merci
Samuel