NSComparisonResult和NSComparator - 它们是什么?

wh1*_*t1k 7 iphone function-pointers objective-c ios objective-c-blocks

什么是NSComparisonResultNSComparator

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

typedef NSComparisonResult (^NSComparator)(id obj1, id obj2);
Run Code Online (Sandbox Code Playgroud)

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

而且,我甚至无法猜出^符号的含义.

Jac*_*kin 22

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

typedef NSComparisonResult (^NSComparator)(id obj1, id obj2);
//          ^                      ^                ^
//   return type of block      type name       arguments
Run Code Online (Sandbox Code Playgroud)

这意味着该类型NSComparator是一个,它接受类型的两个对象id称为obj1obj2,并返回NSComparisonResult.

具体NSComparator基础数据类型参考中定义.

要了解有关C块的更多信息,请查看此ADC文章" 块编程主题".

例:

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

NSComparisonResult compResult = compareStuff(someObject, someOtherObject);
Run Code Online (Sandbox Code Playgroud)


whi*_*and 7

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

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

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

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