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是的,这个块的“契约”似乎没有很好地定义;似乎有很多事后诸葛亮。