2009-10-02 8 views
2

Dans une branche de mon code, je encore utilisé cecomment ces initialisations NSMutableArray sont-elles différentes?

NSMutableArray *array1 = [[NSMutableArray alloc] init]; 

Le tableau ci-dessus est utilisé alimenter un UITableVew.

juste cause, je suis passé à ce qui suit:

NSMutableArray *array1 = [NSMutableArray arrayWithCapacity:0] 

J'ai fait aucun autre changement à mon code) et de plantage de mon application chaque fois que je tente de faire défiler la liste dans le UITableView.

Il semble que mon tableau ne soit pas initialisé correctement. Quelqu'un peut-il expliquer pourquoi cela arriverait? Les deux méthodes ne sont-elles pas identiques à la façon dont l'espace mémoire sous-jacent est alloué?

+0

la méthode pratique correspondante pour "init" serait "[NSMutableArray array]' – newacct

Répondre

2

Votre deuxième ligne de code ne conserve pas NSArray, ce qui provoque un blocage. Vous devrez appeler le [array1 retain] après avoir appelé le arrayWithCapacity:.

Il y a un peu d'informations utiles dans ce post: Understanding reference counting with Cocoa/Objective C

En général, si vous appelez une méthode de classe qui ne commence pas par « nouveau » ou « init » (par exemple arrayWithCapacity), vous peut généralement supposer que l'objet retourné sera auto-libéré.

Questions connexes