什么是NSComparisonResult
和NSComparator
?
我见过其中一种类型定义,类似于:
typedef NSComparisonResult (^NSComparator)(id obj1, id obj2);
与函数指针有什么不同吗?
另外,我甚至猜不出^
符号的含义。
答案 0 :(得分:22)
^
表示块类型,在概念上类似于函数指针。
typedef NSComparisonResult (^NSComparator)(id obj1, id obj2);
// ^ ^ ^
// return type of block type name arguments
这意味着类型NSComparator
是块,它接收两个类型为id
obj1
和obj2
的对象,并返回NSComparisonResult
。
具体NSComparator
在Foundation 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()