Sobes.tech
Junior — Middle

Explique le fonctionnement des pointeurs de fonctions en prenant comme exemple une fonction qui contient une autre fonction à l'intérieur.

sobes.tech IA

Réponse de l'IA

En iOS (Swift ou Objective-C), la notion de pointeurs de fonctions est implémentée via des closures ou des blocks. En langage C, sur lequel est basé Objective-C, les pointeurs de fonctions permettent de passer des fonctions en tant que paramètres ou de les stocker pour un appel.

Exemple en C avec une fonction qui contient une autre fonction à l’intérieur (via une fonction imbriquée ou une fonction retournant un pointeur):

#include <stdio.h>

// En C, il n’y a pas de fonctions imbriquées, mais on peut retourner un pointeur vers une fonction
int innerFunction(int x) {
    return x * x;
}

int (*outerFunction())(int) {
    // Retourne un pointeur vers innerFunction
    return &innerFunction;
}

int main() {
    int (*funcPtr)(int) = outerFunction();
    int result = funcPtr(5); // appel à innerFunction via un pointeur
    printf("Résultat: %d\n", result); // Résultat: 25
    return 0;
}

En Swift, on peut utiliser des closures:

func outerFunction() -> (Int) -> Int {
    func innerFunction(x: Int) -> Int {
        return x * x
    }
    return innerFunction
}

let funcPtr = outerFunction()
print(funcPtr(5)) // 25

Ainsi, les pointeurs de fonctions permettent de choisir et d’appeler des fonctions de manière dynamique, ce qui est utile pour les callbacks et la programmation fonctionnelle.