Parcours récursif d'un Graph
Flo
Membre
Bonjour,
Je désire mettre en place une sorte de "background updating" sur un graph de donnée. Une bonne solution m'a semblé d'écrire une méthode récursive qui tournerai dans un thread et se déclencherai à intervalle régulier.
En gros, à chaque update, le graph est parcouru deux fois :
- une première pour récupérer les infos nécessaires à la construction d'un objet NSURL
- une deuxième pour mettre a jour chaque noeud en fonction des infos récupérées sur le web sous forme de fichier CSV.
Je me suis laissé dire que les appels de méthodes étaient lents en objective-c, j'ai donc pensé à des procédures C ou à encapsuler une procédure C dans une Objective-c avec les pointeurs de fonctions(IMP).
J'ai essayé de placer une procédure C et à chaque fois le compilateur crie... Et j'avoue ne pas avoir bien compris la manipulation des pointeurs de fonction, même après lecture de la doc de NSObject un peu succincte et pauvre en exemple il faut bien l'avouer...
Quelqu'un aurait-il un exemple simple et clair à me conseiller ?
Merci d'avance.
Je désire mettre en place une sorte de "background updating" sur un graph de donnée. Une bonne solution m'a semblé d'écrire une méthode récursive qui tournerai dans un thread et se déclencherai à intervalle régulier.
En gros, à chaque update, le graph est parcouru deux fois :
- une première pour récupérer les infos nécessaires à la construction d'un objet NSURL
- une deuxième pour mettre a jour chaque noeud en fonction des infos récupérées sur le web sous forme de fichier CSV.
Je me suis laissé dire que les appels de méthodes étaient lents en objective-c, j'ai donc pensé à des procédures C ou à encapsuler une procédure C dans une Objective-c avec les pointeurs de fonctions(IMP).
J'ai essayé de placer une procédure C et à chaque fois le compilateur crie... Et j'avoue ne pas avoir bien compris la manipulation des pointeurs de fonction, même après lecture de la doc de NSObject un peu succincte et pauvre en exemple il faut bien l'avouer...
Quelqu'un aurait-il un exemple simple et clair à me conseiller ?
Merci d'avance.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
En C , en voici un modèle simple
Je me demande juste comment intégrer ce genre de chose dans mon projet, dois-je faire un fichier .c à part ou il y a-t-il un moyen d'intégrer tout ça dans un fichier .m d'une classe existante ?
Que représente FONCTION ? Est-ce une macro ? Un type définit en C ? Ce que je souhaite c'est juste appeler une fonction récursive écrite en C dans une méthode d'instance en objective-c...
ICI
Mais je pense que c'est pas la peine de se prendre le chou avec ça pour ce qui t'es nécessaire. L'Objective-C n'étant qu'une surcouche du C, il suffit d'appeler ta fonction C comme tu appellerais n'importe quelle autre fonction C dans un programme C. D'ailleurs je suis sûr que tu l'as déjà fait sans t'en rendre compte, en particulier avec NSLog(...) qui est une fonction C et non une méthode Objective-C !
Exemple (avec une méthode de calcul de factorielle bateau juste pour l'exemple)
---
[EDIT]
PS : Passer par les "IMP" est une solution surtout quand on a besoin d'appeler beaucoup de fois une méthode Objective-C, pour éviter l'overhead du mécanisme d'envoi de messages à chaque boucle par exemple. On récupère dans une variable de type IMP directement un pointeur vers la fonction C (celle qui sera créée par le compilateur lorsqu'il va transformer le code Objective-C en code intermédiaire C) correspondant à la méthode Objective-C qui nous intéresse, comme ça dans la boucle on appelle directement la fonction C plutôt que d'utiliser les messages Objective-C. Mais ça convient bien à une grosse boucle, mais pas à un appel récursif puisque pour la boucle on peut déclarer et initialiser une variable IMP avant le début de la boucle et l'utiliser dedans ensuite, mais pour une méthode récursive, où stocker la variable IMP ? Dans la méthode récursive ? Ca ne va pas puisqu'on devra la recalculer à chaque fois... Dans la méthode qui l'appelle ? Mais dans ce cas on n'y a plus accès dans la méthode récursive qui doit d'auto-appeler... Du coup l'intérêt est vachement plus limité voire inexistant pour ce cas de figure, contrairement au cas d'une grosse boucle.