我正在学习目标C.
只是想知道*
和^
之间的区别。
我知道*
意味着记忆正确吗?
NSString *test = [[NSString alloc] init];
但今天我遇到了^
符号。有人可以帮忙解释一下吗?
-(void) sort
{
[book sortUsingComparator:
^(id obj1, id obj2) {
return [obj1 compareNames: obj2];
} ];
}
答案 0 :(得分:4)
*
用于普通的旧c指针。 ^
用于块(proc,closure,lambda)。具体来说,Objective-C中的一个块实现为Closure。
^
本质上是一个函数指针,带有一些与范围相关的副作用,它们区别地复制必要的对象和基元,这样当调用块(函数)时,块中的变量就是一个副本。属于定义块的外部范围的那些。
在Objective-C中,块是一个非常大且有些复杂的主题。您可以找到非常简洁的概述here。
Apple的文档中可以找到BIG综合内容here。
编辑:
在您的具体示例中......
-(void) sort
{
[book sortUsingComparator:
^(id obj1, id obj2) {
return [obj1 compareNames: obj2];
} ];
}
方法sortUsingComparator:
将匿名块作为参数。简化的块签名是^(id obj1, id obj)
。简化的含义是,由于返回类型为void
,因此可以省略。是什么让这个例子让很多人感到困惑的是,这个块实际上是在一个方法调用的中间内联定义的。
如果块首先使用描述性名称声明,然后像任何其他c函数一样定义,然后在方法调用中使用 name ,则此代码将更容易阅读。但是,似乎大多数开发人员都不这样做。
答案 1 :(得分:3)
^
与Objective-C中的块有关。看看the documentation。
答案 2 :(得分:2)