【发布时间】:2021-07-13 12:38:28
【问题描述】:
调用方法时
- (void)readPacketsWithCompletionHandler:(void (^)(
NSArray<NSData *> *packets, NSArray<NSNumber *> *protocols))completionHandler;
completionHandler 要么被直接调用,以防调用时数据包可用,要么在稍后数据包可用时调用。
然而没有记录的是:如果我在之前的集合 completionHandler 被调用之前再次调用此方法会发生什么?
新的处理程序是否会替换之前的 set 并且之前的 set 将不再被调用?
是否在数据到达时调度和调用处理程序?如果是这样,它们会按照我传递它们的顺序、相反的顺序还是随机顺序被调用?
有没有人对如何实现该方法有任何见解?
当然,我可以制作一个演示项目,创建一个测试设置,然后看看我通过测试得到了什么结果,但这非常耗时且不一定可靠。未指定行为的问题在于它可能会在不让任何人知道的情况下随意更改。此方法在 macOS 和 iOS 上的行为可能会有所不同,它可能会随着每个新的 OS 版本或一周中的哪一天而有所不同。
或者说没有记录是故意的?我是否必须将其解释为:您可以调用此方法一次,在执行回调后,您可以使用相同或新的回调再次调用它。其他一切都是未定义的行为,如果以不同的方式使用该 API,您不能也不应该依赖任何特定行为。
【问题讨论】:
标签: ios objective-c macos networkextension