我正在运行以下代码:
[peripheral maximumWriteValueLengthForType:CBCharacteristicWriteWithResponse];
就我而言(iPhone 7、iOS 10.0.2),它返回 512。这个数字的含义是什么?
来自文档:
method maximumWriteValueLengthForType:
The maximum amount of data, in bytes, that can be sent to a characteristic in a single write type.
但是如果我尝试发送 500
或 600 字节
,它的工作原理完全相同。目标设备接收所有数据。并且在这两种情况下都不会调用响应回调。
最佳答案
据我了解,理论上它应该返回 ATT MTU 大小,因为它是从中央设备向外围设备请求的。从Peripheral侧来看,类似的值是central.maximumUpdateValueLength
,建议避免发送特征值大于central.maximumUpdateValueLength
的通知。但不幸的是,这没有明确记录,并且 Apple 自己的示例(BTETransfer 应用程序)使用默认 ATT MTU 大小 20 以确保安全。对于通知,我认为,如果您尝试更改超过 central.maximumUpdateValueLength
字节,则可能会发生不好的事情。
但是从我在 Android 上的实验中,我发现从另一侧(中央侧)正在进行某种缓存,并且有可能发送比当前 ATT MTU 大小更多的字节(在 Android 上,可以使用通过 onMtuChanged
并且似乎也在连接后立即协商到 512)。因此,我们可能会假设 iOS 上正在进行相同类型的缓存,但我不确定它可以有多大。在 Android 上,我们至少有写入回调来知道何时可以安全地写入更多数据。在 iOS 上,不确定如果我们尝试写入(假设从中央侧写入 1MB)会发生什么。但我今天会尝试一下。
此外,iOS 版本之间的行为可能会有所不同,因为 central.maximumUpdateValueLength
自 iOS 7 起可用,但 peripheral MaximumWriteValueLengthForType
仅自 iOS 9 起可用。
关于ios - [外设maximumWriteValueLengthForType :CBCharacteristicWriteWithResponse] return?]是什么意思,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41289783/