Ios [peripheral MaximumWriteValueLength for Type:CBCharacteristicWriteWithResponse]返回什么?

Ios [peripheral MaximumWriteValueLength for Type:CBCharacteristicWriteWithResponse]返回什么?,ios,objective-c,bluetooth-lowenergy,Ios,Objective C,Bluetooth Lowenergy,我正在运行以下代码: [peripheral maximumWriteValueLengthForType:CBCharacteristicWriteWithResponse]; 在我的例子中(iphone7,ios10.0.2),它返回512。这个数字是什么意思 从文件: 方法maximumWriteValueLengthForType: 单个写入类型中可发送到特征的最大数据量(以字节为单位) 但是如果我尝试发送500或600字节,它的工作原理是完全相同的。目标设备接收所有数据。在这两种情况

我正在运行以下代码:

[peripheral maximumWriteValueLengthForType:CBCharacteristicWriteWithResponse];
在我的例子中(iphone7,ios10.0.2),它返回512。这个数字是什么意思

从文件:

方法maximumWriteValueLengthForType:

单个写入类型中可发送到特征的最大数据量(以字节为单位)


但是如果我尝试发送
500
600字节
,它的工作原理是完全相同的。目标设备接收所有数据。在这两种情况下都不会调用响应回调。

据我所知,理论上它应该返回ATT MTU大小,因为它是从中央到外围请求的。从外围设备方面来看,类似的值为
central.maximumUpdateValueLength
,建议避免发送特征值大于
central.maximumUpdateValueLength
的通知。但不幸的是,这并没有明确的记录,苹果自己的例子(BTETransfer应用程序)也使用默认的ATT MTU大小20来确保安全。对于通知,我假设,如果您尝试更改的字节数超过
central.maximumUpdateValueLength
字节数,则可能会发生错误

但从我在Android上的实验中,我发现从另一个方面——中央方面——某种缓存正在进行,并且有可能发送比当前ATT MTU大小更多的字节(在Android上,可以通过
onmtunchanged
获得,并且似乎在连接后立即协商到512)。因此,我们可以假设在iOS上也有同样的缓存,但我不确定它能有多大。在Android上,我们至少有写回调来知道何时写更多数据是安全的。在iOS上,不确定如果我们尝试写入会发生什么,比如说从中央开始在一个可写特性上写入1MB。但我今天要试试

此外,iOS版本之间的行为可能有所不同,因为自iOS 7起,
central.maximumUpdateValueLength
可用,但仅从iOS 9起,
外围设备maximumWriteValueLength
才可用