enumerateKeysAndObjectsUsingBlock BOOL *停止

时间:2016-07-27 10:57:14

标签: ios xcode

我认为api

很有趣
- (void)enumerateKeysAndObjectsUsingBlock:(void (^)(KeyType key, ObjectType obj, BOOL *stop))block

我注意到参数stop.At首先,我认为这是我从未见过的一种(BOOL *)。但文件说

  

讨论   如果块设置*停止为YES,则枚举停止。

看起来这个名为* stop的参数,我删除*会出错。

我想知道为什么?

1 个答案:

答案 0 :(得分:1)

我认为这是关于Objective-C所基于的C语言的一个非常基本的问题。你不熟悉指针吗?

stop是块的参数。它的类型是BOOL*,意思是“指向BOOL的指针”。

-enumerateKeysAndObjectsUsingBlock:实现中的某个地方是调用你所提供的块的代码。该代码已为BOOL值创建存储空间。它将指向该存储的(a.k.a.地址)的指针传递给您的块,以便您的块可以通过写入指针来修改该存储位置的值。

语句*stop = YES;将值YES分配给BOOL变量指向的stop。这就是我在上面写的“通过指针写”。通过这种方式,块已经修改了调用者的变量,这就是调用者知道块希望枚举停止的方式。