代码之家  ›  专栏  ›  技术社区  ›  wh1t3cat1k

NSComparisonResult和NSComparator-它们是什么?

  •  7
  • wh1t3cat1k  · 技术社区  · 14 年前

    是什么 NSComparisonResult NSComparator ?

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

    它和函数指针有什么不同吗?

    而且,我都猜不出 ^

    3 回复  |  直到 13 年前
        1
  •  22
  •   Jacob Relkin    13 年前

    ^ 表示 块类型

    typedef NSComparisonResult (^NSComparator)(id obj1, id obj2);
    //          ^                      ^                ^
    //   return type of block      type name       arguments
    

    这意味着 NSComparator 它接受两个类型的对象 id 打电话 obj1 obj2 ,并返回 NSComparisonResult .

    明确地 N压缩机 定义在 Foundation Data Types reference

    要了解更多关于C块的信息,请参阅这篇ADC文章 Blocks Programming Topics

    例子:

    NSComparator compareStuff = ^(id obj1, id obj2) {
       return NSOrderedSame;
    };
    
    NSComparisonResult compResult = compareStuff(someObject, someOtherObject);
    
        2
  •  7
  •   whitneyland    13 年前

    雅各布的回答是好的,但是回答“这与函数指针有何不同?”:

    1) 一个街区是 函数指针。方块是苹果公司在C/C++/Objtovi-C中实现功能第一类公民的方法。它对iOS 4是新的。

    2) 为什么要引入这个奇怪的概念?事实证明,一级函数在很多场景中都很有用,例如管理可以并行执行的工作块,比如在Grand Central Dispatch中。除了GCD之外,这个理论非常重要,以至于整个软件系统都基于它。Lisp是第一个。

    3) 您将在许多其他语言中看到这个概念,但名称不同。例如,Microsoft.Net有lambdas和delegates(与Objective-C委托没有关系),而最通用的名称可能是匿名函数或 first class functions .

        3
  •  0
  •   Aruna    8 年前
    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