7
votes

NscomparonResult et Nscomparator - Que sont-ils?

Qu'est-ce que nscomparaisonResult code> et nscomparator code>?

J'ai vu l'une des définitions de type, quelque chose comme ça: p>

typedef NSComparisonResult (^NSComparator)(id obj1, id obj2);


0 commentaires

3 Réponses :


22
votes

^ code> signifie un type de bloc fort> fort>, similaire dans le concept de point à un pointeur de fonction.

NSComparator compareStuff = ^(id obj1, id obj2) {
   return NSOrderedSame;
};

NSComparisonResult compResult = compareStuff(someObject, someOtherObject);


1 commentaires

Merci beaucoup, Jacob! Maintenant, j'ai trouvé des tutoriels sur des blocs et j'ai appris un peu plus)



7
votes

La réponse de Jacob est bonne, cependant de répondre à la partie "Comment est-ce différent d'un pointeur de fonction?":

1) Un bloc est pas un pointeur de fonction. Les blocs sont des pommes sur la manière de faire des fonctions citoyens de première classe en C / C ++ / Objective-c. C'est nouveau à iOS 4.0.

2) Pourquoi introduire ce concept étrange? Indiquez les fonctions de première classe sont utiles dans un certain nombre de scénarios, par exemple la gestion des morceaux de travail pouvant être exécutés en parallèle, comme dans la grande expédition centrale. Au-delà du GCD, la théorie est suffisamment importante pour qu'il existe des systèmes logiciels entiers basés sur elle. Lisp était 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 des lambdas et des délégués (aucun lien avec les délégués de l'objectif-C), tandis que les noms les plus génériques sont probablement des fonctions anonymes ou Fonctions de première classe .


0 commentaires

0
votes
NSComparisonResult comparisionresult;
NSString * alphabet1;
NSString * alphabet2;


// Case 1

alphabet1 = @"a";
alphabet2 = @"A";
comparisionresult = [alphabet1 caseInsensitiveCompare:alphabet2];

if (comparisionresult == NSOrderedSame)
    NSLog(@"a and a are same. And the NSComparisionResult Value is %ld \n\n", comparisionresult);
//Result: a and a are same. And the NSComparisionResult Value is 0

// Case 2
alphabet1 = @"a";
alphabet2 = @"B";
comparisionresult = [alphabet1 caseInsensitiveCompare:alphabet2];

if (comparisionresult == NSOrderedAscending)
    NSLog(@"a is greater than b. And the NSComparisionResult Value is %ld \n\n", comparisionresult);
//Result: a is greater than b. And the NSComparisionResult Value is -1

// Case 3
alphabet1 = @"B";
alphabet2 = @"a";
comparisionresult = [alphabet1 caseInsensitiveCompare:alphabet2];

if (comparisionresult == NSOrderedDescending)
    NSLog(@"b is less than a. And the NSComparisionResult Value is %ld", comparisionresult);

//Result: b is less than a. And the NSComparisionResult Value is 1

0 commentaires