Apple a introduit une fermeture dans C comme nom de 'bloc'. Dois-je gérer la mémoire pour les blocs? Si oui, que dois-je faire?Comment gérer la mémoire pour la fonction de bloc C? (Extension Apple)
1
A
Répondre
1
A l'instar des variables avec fonction scope en langage C, les littéraux de blocs dans les fonctions ont une durée de stockage automatique. Quand vous pensez à un littéral de bloc comme un type de pointeur, vous voyez ce qui peut mal tourner: Lorsque vous renvoyez un bloc d'une fonction, vous renvoyez un pointeur vers la mémoire locale, qui n'est plus valide.
La solution est d'utiliser la fonction Block_copy()
chaque fois que vous voulez retourner un bloc et le Block_release()
lorsque vous n'en avez plus besoin.
Plus d'informations dans this tutorial qui a une section distincte sur les blocs en C.