2010-12-09 4 views
1

Je me demande si quelqu'un pourrait m'aider rapidement avec ce qui suit, ai-je besoin d'ajouter une [myTableView release]; après avoir appelé [voir addSubview: [self myTableView]]; ? Au début, je pensais pas, et l'exécuter par CLANG produit aux avertissements de mémoireGestion de la mémoire, libération nécessaire?

Voici ma pensée:

  • [auto setMyTableView: tempTableView]; retainCount = (+1)
  • [voir addSubview: [self myTableView]]; retainCount = (+2)
  • // [myTableView release]; < < ICI retainCount = (+1)
  • -dealloc [Version myTableView]; retainCount = (0)

.

@property (nonatomic, retain) UITableView *myTableView; 

.

- (void)loadView { 
    NSLog(@"%s", __PRETTY_FUNCTION__); 

    [self setTitle:@"Location Data"]; 
    CGRect viewFrame = CGRectMake(0, 20, 320, 460); 
    UIView *view = [[UIView alloc] initWithFrame:viewFrame]; 

    CGRect tableFrame = CGRectMake(0, 0, 320, 416); 
    UITableView *tempTableView = [[UITableView alloc] initWithFrame:tableFrame]; 
    [self setMyTableView:tempTableView]; 
    [tempTableView release]; 

    [view addSubview:[self myTableView]]; 
    //[myTableView release]; << HERE 

    [[self myTableView] setDelegate:self]; 
    [[self myTableView] setDataSource:self]; 

    [self setView:view]; 
    [view release]; 
} 

.

- (void)dealloc { 
    [myTableView release]; 
    [dataModel release]; 
    [super dealloc]; 
} 

EDIT:hmm peut-être je ne pas [vue addSubview: [self myTableView]]; le conserve et le relâchera une fois terminé. Votre droite Carl, ma mauvaise. Je commençais à me confondre avec: alloc, ensemble, la libération, lorsque cela est simplement le point de vue de l'appropriation (et la responsabilité de libérer plus tard)

Répondre

2

Vous avez raison quand vous dites que [view addSubview:[self myTableView]]; conservera votre vue de table, mais puisque c'est le view qui le retient, c'est le view qui est censé le libérer. Et il le sera, quand la vue sera libérée. Vous n'avez qu'à libérer ce que vous avez vous-même conservé, c'est-à-dire que vous n'avez qu'à libérer la vue de la table une fois dans votre méthode dealloc.

+0

Merci filipe, vous et Carl étiez sur place, je vais marquer le vôtre aussi accepté que vous avez expliqué un peu plus de ce qui se passe, merci beaucoup ... – fuzzygoat

2

Votre méthode ne retainmyTableView, donc il ne devrait pas release il.

+0

Je suis d'accord avec Carl. view fait une retenue sur [self myTableView] (deuxième puce sur "my thinking"), mais la vue se déclenchera quand elle sera publiée. – fsaint

+0

Merci Carl, très apprécié. – fuzzygoat