Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 为什么在enumerateObjectsUsingBlock中停止布尔指针:?_Objective C - Fatal编程技术网

Objective c 为什么在enumerateObjectsUsingBlock中停止布尔指针:?

Objective c 为什么在enumerateObjectsUsingBlock中停止布尔指针:?,objective-c,Objective C,我明白,但我很好奇为什么这是一个BOOL*,而不仅仅是一个BOOL。是否因为值本身需要存在于块范围之外,以便EnumerateObjectsSusingBlock:可以访问块本身可能分配给它的值 要回答您的问题(尽管它看起来像一个复制品),块需要告诉它的调用者停止枚举,如果它找到了它要查找的内容。在C中有两种选择: 返回YES继续,或返回NO停止 在调用者的作用域中设置一个变量,即BOOL* 苹果选择了第二种方法,尽管我认为第一种方法更简单(少了一个参数),而且更直观 它不能仅仅是BOOL,

我明白,但我很好奇为什么这是一个
BOOL*
,而不仅仅是一个BOOL。是否因为值本身需要存在于块范围之外,以便
EnumerateObjectsSusingBlock:
可以访问块本身可能分配给它的值

要回答您的问题(尽管它看起来像一个复制品),块需要告诉它的调用者停止枚举,如果它找到了它要查找的内容。在C中有两种选择:

  • 返回YES
    继续,或
    返回NO
    停止
  • 在调用者的作用域中设置一个变量,即
    BOOL*
苹果选择了第二种方法,尽管我认为第一种方法更简单(少了一个参数),而且更直观


它不能仅仅是
BOOL
,因为它只设置变量的本地副本,而不是调用者范围内的变量。

(我刚才问过鸭子吗?)引用的dupe没有回答“为什么参数是指针?”的问题,是的,它回答了;我的答案的最后一部分解释得很清楚。啊,我错过了。感谢您指出这一点。使用第二种技术可能产生的一个区别是,块可以访问上一次迭代关于停止的决定。当然,这是(不幸的?)没有文档记录以这种方式工作——无法保证每一步的
stop
值都是相同的。@JoshCaswell,但可能它必须始终是
no
,否则该块将不会再次输入?bbum对我关于并发枚举的另一个问题的答案发表了评论,并且stop标志是“advisory”;我就是这么想的。现在还不完全清楚枚举是否总是可以继续,或者只有在请求并发时才可以继续。在这种情况下,可以方便地发出信号“我已经发现我已经完成了”,当然,如果必要的话,您可以有一个本地
\u块
变量。@JoshCaswell是的,这个块的“契约”似乎没有很好地定义;似乎有很多事后诸葛亮。