NSComparisonResult和NSComparator - 它们是什么?

时间:2010-11-07 15:07:19

标签: iphone objective-c ios function-pointers objective-c-blocks

什么是NSComparisonResultNSComparator

我见过其中一种类型定义,类似于:

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

与函数指针有什么不同吗?

另外,我甚至猜不出^符号的含义。

3 个答案:

答案 0 :(得分:22)

^表示块类型,在概念上类似于函数指针。

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

这意味着类型NSComparator,它接收两个类型为id obj1obj2的对象,并返回NSComparisonResult

具体NSComparatorFoundation Data Types reference

中定义

要了解有关C块的更多信息,请查看此ADC文章Blocks Programming Topics

示例:

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

NSComparisonResult compResult = compareStuff(someObject, someOtherObject);

答案 1 :(得分:7)

雅各布的回答很好,但回答关于“这与函数指针有什么不同?”的部分:

1)一个块一个函数指针。块是Apple如何在C / C ++ / Objective-C中使函数成为一等公民。这是iOS 4.0的新功能。

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

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

答案 2 :(得分:0)

loadAd()