2011-03-03 6 views
0

Est-ce que quelqu'un peut me diriger dans la bonne direction? Lorsque je charge ce fichier en tant que plume, que je le décharge et que je le recharge, les instruments indiquent que je reçois une fuite de mémoire. Plus précisément, il est dit que là où je place le compareOptions NSMutableArray, et où j'appelle [version vc]. CompareOptions est une propriété synthesize qui est également publiée dans le dealloc. Merci beaucoup d'avance.Fuite de mémoire avec matrice

- (void)viewDidLoad{ 
[super viewDidLoad]; 

//NSLog(@"Comparison.viewDidLoad"); 

self.compareOptions = [[NSMutableArray alloc] init]; 


self.tabs = [[ComparisonTabs alloc] initWithFrame:CGRectMake(450, 85, 650, 50)]; 

    //NSDictionary * currComparison = (NSDictionary*)[data objectAtIndex:0]; 
    //NSArray   * correctOptions = [currComparison objectForKey:@"correct"]; 

for(int i = 0; i < 3; i++) 
{ 
    UIViewController * vc = [[UIViewController alloc] initWithNibName:@"ComparisonOptions" bundle:nil]; 

    ComparisonOptions * options = (ComparisonOptions *)vc.view; 

    [options setup]; 
    options.index = i; 

    //options.frame = CGRectMake(355 + (306 * i), 475, options.frame.size.width, options.frame.size.height); 

    //[options setCorrect:[correctOptions objectAtIndex:i]]; 

    [vc release]; 

    [self.view addSubview:options]; 

    [self.compareOptions addObject:options]; 
} 

[self.view addSubview:self.tabs]; 

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(tabSelectedHandler:) name:@"tabSelected" object:nil ]; 

[self update:0];} 

Répondre

3

Comment ressemble la propriété de compareOptions et onglets? Est-ce qu'il retient vos objets?

Si elle est conservée, vous obtiendrez une double retenue si vous utilisez le setter et alloc.

self.compareOptions = [[NSMutableArray alloc] init]; 
    ^retains       ^^^^^ retains 

self.tabs = [[ComparisonTabs alloc] initWithFrame:CGRectMake(450, 85, 650, 50)]; 
    ^retains    ^^^^^ retains 

vous pouvez utiliser cette place

self.compareOptions = [NSMutableArray array]; 
self.tabs = [[[ComparisonTabs alloc] initWithFrame:CGRectMake(450, 85, 650, 50)] autorelease]; 

UIViewController * vc = [[UIViewController alloc] initWithNibName:@"ComparisonOptions" bundle:nil]; 
ComparisonOptions * options = (ComparisonOptions *)vc.view; 

[vc release]; 

[self.view addSubview:options]; 

vc.view (c.-à-options) seront deallocated en même temps vc sera désallouée. Et cela arrive quand vous appelez [release vc]. Vous ne pouvez pas utiliser d'options après cela.

Vous devez libérer vc après avoir ajouté la vue à la sous-vue.


Et vous devriez penser à de meilleurs noms de classe. Je ne supposerais jamais que ComparisonOptions est une vue. Cela ressemble plus à NSCaseInsensitiveSearch etc. Vous savez, comme ce serait une option.