2010-08-25 7 views
0

J'ai eu quelques problèmes avec certaines variables à l'intérieur d'une classe en cours de suppression ces derniers temps. Voici comment je déclare:Classes supprimant des variables? iPhone SDK

MyClass *myClass; 
-(void)viewDidLoad { 
myClass = [MyClass new]; 
//something using my class 

puis quand je l'appelle une fonction plus tard, qui utilise un tableau et un dictionnaire intérieur de la classe.

[myClass doSomething]; 

Voici le code que j'obtiens dans la console.

-[CFArray objectAtIndex:]: message sent to deallocated instance 0x5d1f370 

Voici comment je déclare la zone dans la classe

NSArray *myArray; 
-(void)doSomething{ 
myArray = [NSArray array]; 

Puis plus tard, je joue juste un objectAtIndex valide sur le tableau. Quelqu'un s'il vous plaît aidez-moi.

Répondre

1

On dirait que vous ne retenez pas les objets, donc au moment où vous les utilisez réellement, ils sont désalloués, car ils sont automatiquement libérés. Utilisez les propriétés synthétisées ou ajoutez un message de conservation à chaque initialisation, c'est-à-dire, [[NSArray array] retain] et [[MyClass new] retain], assurez-vous de release le cas échéant. Je recommande d'utiliser plutôt des propriétés, c'est plus propre.

EDIT: Merci à imaginaryboy: l'appel [NSArray array] libère un objet autoreleased, de sorte que vous devez retenir que, en changeant à [NSArray new] par exemple. Laissez [MyClass new] car il renvoie déjà un objet conservé.

+2

Le tableau est la seule chose qui pose problème. [Tableau NSArray] renvoie un objet autoreleased. [MyClass new] renvoie un objet qui a déjà été conservé. Donc, laissez le [MyClass new] seul, et permutez le [tableau NSArray] pour la suggestion de @ [NSArray array] de Blaenk ou plus généralement [NSArray new] ou [NSArray alloc] init]. – imaginaryboy

+0

merci pour la clarification imaginaryboy, je vais l'ajouter dans ma réponse –

+0

Je le fais dans mon interface. @property (nonatomic, retain) NSArray * myArray; – Chris

Questions connexes