J'ai pilonné ma tête contre mon moniteur pendant des heures (et lire les messages similaires). Je suis toujours perplexe.Encore un autre Leaking NSMutableDictionary Poster
Je déclare un tableau dans mon fichier * .h qui affiche des données en vue de la table:
@interface TeamsTableViewController : UITableViewController <UITableViewDelegate, UITableViewDataSource>
{
NSMutableArray *teamsArray;
}
J'allouer le tableau dans -viewDidLoad
et la libération dans dealloc:
-(void)viewDidLoad
{
[super viewDidLoad];
// Inititalize the mutablearray that will store the xml for the table.
teamsArray = [[NSMutableArray alloc] init];
}
-(void)dealloc
{
[teamsArray release];
[super dealloc];
}
Chaque l'heure -viewWillAppear
, j'appelle mon loadData pour recharger les données (parce que les données peuvent changer). Pour ce post (et comme j'essaie de localiser ma fuite), j'ai codé en dur les données. Le commentaire montre l'emplacement des fuites rapportées. (La fuite se produit lorsque la vue de la table est réaffichée.)
-(void)loadData
{
// Empty any objects that are already in the array.
[teamsArray removeAllObjects];
// Fill a dictionary (normally looping through a file, but hardcoded for leak hunting).
NSMutableDictionary *oneTeamDictionary = [NSMutableDictionary dictionary];
[oneTeamDictionary setObject:@"100" forKey:@"basenumber"];
[oneTeamDictionary setObject:@"Team Name" forKey:@"teamname"];
[oneTeamDictionary setObject:@"XYZ" forKey:@"teamabbr"];
[oneTeamDictionary setObject:@"USA" forKey:@"countryabbr"];
[oneTeamDictionary setObject:@"Joe" forKey:@"manager"];
// Add this team to the array used to display table data.
[teamsArray addObject:[oneTeamDictionary copy]]; // Leaks Malloc 32 bytes and _NSCFDictionary 48 bytes here.
// Reload the table view with new data.
[self.tableView reloadData];
}
Dans mon état newbieistic, je pense que [teamsArray release]
libérerait l'objet dictionnaire. J'ai aussi essayé d'utiliser "alloc] init]" pour créer le dictionnaire, ainsi que libérer et réallouer le teamsArray (plutôt que d'appeler removeAllObjects
).
objets alloc dans viewDidLoad vous devez les libérer dans viewDidUnload. viewDidLoad et viewDidUnload peuvent être appelés plusieurs fois sur le même objet. – Marcio