Je travaille sur une application iPhone en utilisant l'objectif C. J'ai la classe A, qui crée un pointeur NSMutableArray appelé "liste". Mais, en classe A, je ne crée jamais un objet pour qu'il pointe vers. Au lieu de cela, j'appelle une méthode de classe dans la classe B, pour obtenir des données d'une base de données sqlite, et y remplir un objet NSMutableArray. Je veux être en mesure de définir le pointeur dans la classe A pour pointer vers l'objet NSMutableArray créé dans la méthode de classe B en le passant en tant qu'argument à la méthode. Je ne peux pas le faire en retournant le tableau parce que je veux retourner le résultat sqlite.Comment utiliser une méthode pour changer un pointeur?
Je me demande si je fais ça correctement? Je n'ai pas encore écrit toute la méthode (quand ça sera fait, ça sera assez long), mais je veux savoir si je fais correctement le pointeur avant de commencer le reste.
//ClassA.m
//...
NSMutableArray *list;
[ClassB populateArrayFromSqlite:&list];
//Now do stuff with "list", which should point to the array created in populateArrayFromSqlite
//...
//ClassB.m
+(int)populateArrayFromSqlite:(NSMutableArray**)ar {
NSMutableArray *array = [[NSMutableArray alloc] init];
//Here there will be code that populates the array using sqlite (once I write it)
//And then I need to set the "list" pointer in ClassA.m to point to this array
ar = &array; //Is this how?
return resultFromSqlite;
}
Ai-je fait les choses correctement? Ou est-ce que je ne comprends pas quelque chose? Je suppose que ce truc de pointeur à point ne clique pas encore avec moi. Après avoir lu quelques sources générales sur les pointeurs, je pense que c'est comme ça que je le ferais mais une partie de moi ne comprend pas pourquoi l'argument ar ne peut pas être juste un pointeur régulier (par opposition à un pointeur vers un pointeur) .
+1 bien qu'il serait préférable de vérifier si '(newArray = de zéro!)', Tellement vous ne dérérez pas accidentellement un pointeur nul. :) –
Droite. J'ai mentionné cette possibilité juste pour répondre à la question pointeur-à-pointeur, dans la pratique j'utiliserais certainement la solution plus simple que j'ai mentionnée en premier. Je vais ajouter une affirmation pour clarifier les choses. – zoul
Merci, je n'ai même pas pensé à créer l'objet d'abord dans la classe A et à lui passer un pointeur vers la méthode de la classe B. Aussi, avec votre exemple, je pense que je comprends cela. Passer l'adresse d'un pointeur dans l'argument newArray envoie en réalité une copie d'un pointeur au pointeur, et en le déréférenciant, vous obtenez le pointeur lui-même, auquel vous pouvez ensuite assigner une nouvelle adresse, correct? – Adam