NSComparisonResult et NSComparator - quels sont-ils?
Qu'est-ce que NSComparisonResult
et NSComparator
?
J'ai vu l'une des définitions de type, quelque chose comme ça:
typedef NSComparisonResult (^NSComparator)(id obj1, id obj2);
Est-il différent d'un autre pointeur de fonction?
Aussi, je ne peux même pas deviner ce que les ^
symbole signifie.
OriginalL'auteur wh1t3cat1k | 2010-11-07
Vous devez vous connecter pour publier un commentaire.
^
signifie une type de bloc, un concept similaire à un pointeur de fonction.Cela signifie que le type
NSComparator
est un bloc qui prend deux objets de typeid
appeléobj1
etobj2
, et renvoie unNSComparisonResult
.Spécifiquement
NSComparator
est définie dans le Fondation des Types de Données de référence.Et pour en savoir plus sur le C blocs, consultez cet article ADC Les Blocs De Sujets De Programmation.
Exemple:
OriginalL'auteur Jacob Relkin
Jacob réponse est bien, cependant, la réponse pour la partie sur "comment est-ce différent d'un pointeur de fonction?":
1) Un bloc est pas un pointeur de fonction. Les blocs sont Apple sur la façon de faire les fonctions de première classe des citoyens en C/C++/Objective-C. C'est nouveau pour iOS 4.0.
2) Pourquoi introduire ce concept étrange? S'avère de première classe de fonctions sont utiles dans un certain nombre de scénarios, par exemple la gestion des blocs de travaux qui peuvent être exécutés en parallèle, comme dans Grand Central Dispatch. Au-delà de PGCD, la théorie est assez important qu'il existe des logiciels des systèmes basés autour d'elle. Lisp a été l'un des premiers.
3) Vous verrez ce concept dans de nombreuses autres langues, mais par des noms différents. Par exemple, Microsoft .Net a lambdas et les délégués (aucun rapport avec Objective-C délégués), tandis que la plupart des noms génériques sont probablement les fonctions anonymes ou la première classe de fonctions.
OriginalL'auteur whitneyland
OriginalL'auteur Aruna