wh1*_*t1k 7 iphone function-pointers objective-c ios objective-c-blocks
什么是NSComparisonResult和NSComparator?
我见过其中一个类型定义,类似于:
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称为obj1和obj2,并返回NSComparisonResult.
具体NSComparator在基础数据类型参考中定义.
要了解有关C块的更多信息,请查看此ADC文章" 块编程主题".
例:
NSComparator compareStuff = ^(id obj1, id obj2) {
return NSOrderedSame;
};
NSComparisonResult compResult = compareStuff(someObject, someOtherObject);
Run Code Online (Sandbox Code Playgroud)
雅各布的答案很好,但要回答关于"这与函数指针有什么不同?"的部分:
1)块不是函数指针.块是Apple如何在C/C++/Objective-C中使函数成为一等公民.这是iOS 4.0的新功能.
2)为什么要介绍这个奇怪的概念?事实证明,第一类函数在很多场景中都很有用,例如管理可以并行执行的工作块,如Grand Central Dispatch.除了GCD之外,该理论非常重要,因此有完整的软件系统.Lisp是第一个.
3)您将在许多其他语言中看到这个概念,但名称不同.例如,Microsoft .Net具有lambda和委托(与Objective-C委托无关),而最通用的名称可能是匿名函数或第一类函数.
| 归档时间: |
|
| 查看次数: |
21348 次 |
| 最近记录: |