我正在学习目标 C。
*
只是想知道和之间的区别^
。
我知道*
是指指向内存对吗?
NSString *test = [[NSString alloc] init];
但是今天我遇到了这个^
符号。谁能帮忙解释一下好吗?
-(void) sort
{
[book sortUsingComparator:
^(id obj1, id obj2) {
return [obj1 compareNames: obj2];
} ];
}
我正在学习目标 C。
*
只是想知道和之间的区别^
。
我知道*
是指指向内存对吗?
NSString *test = [[NSString alloc] init];
但是今天我遇到了这个^
符号。谁能帮忙解释一下好吗?
-(void) sort
{
[book sortUsingComparator:
^(id obj1, id obj2) {
return [obj1 compareNames: obj2];
} ];
}
*
用于普通的旧 c 指针。 ^
用于块(proc、闭包、lambda)。具体来说,Objective-C 中的块被实现为闭包。
^
本质上是一个函数指针,具有一些与作用域相关的副作用,可以区分复制必要的对象和原语,以便在调用块(函数)时,块中的变量是外部作用域中的变量的副本,其中该块已定义。
在 Objective-C 中,块是一个非常大且有些复杂的主题。您可以在此处找到非常简明的概述。
可以在 Apple 的文档中找到 BIG 全面的内容。
编辑:
在你的具体例子中......
-(void) sort
{
[book sortUsingComparator:
^(id obj1, id obj2) {
return [obj1 compareNames: obj2];
} ];
}
该方法sortUsingComparator:
将匿名块作为参数。简化的块签名是^(id obj1, id obj)
. 简化的意思是,由于返回类型是void
,所以可以省略。这个例子让很多人感到困惑的是,该块实际上是内联定义的,就在方法调用的中间。
如果块首先使用描述性名称声明,然后像任何其他 c 函数一样定义,然后在方法调用中使用名称,则此代码将更易于阅读。但是,似乎大多数开发人员不这样做。
^
与Objective-C中的块有关。看看文档。