为什么大多数块使用参数迭代继续标志而不是返回值?

Eon*_*nil 5 frameworks ios objective-c-blocks

对于大多数迭代块,签名定义为:

void(^)(id obj, BOOL* stop)
Run Code Online (Sandbox Code Playgroud)

使用返回值来停止标志看起来更好.

BOOL(^)(id obj)
Run Code Online (Sandbox Code Playgroud)

但是我相信有充分的理由让他们决定使用当前的形式而不是更简短和方便的形式.为什么他们使用参数停止标志?

kpe*_*yua 4

当然,无论哪种方式都可以正常工作,但请这样想:您是否必须在or循环continue末尾使用该语句?不,当然不是,因为它是自动发生的。如果你想停止循环,你可以使用.forwhilebreak

与基于块的枚举方法类似。您不需要返回来YES指定是否要继续枚举,因为它会自动发生。然而,如果你想停止枚举,你可以简单地设置*stopYES