我目前有我的 OSX 应用程序(中央)通过使用 writeValue 的可写特征向我的 iOS 应用程序(外围)发送 4Kb 图像。
由于图像大小超出限制,我多次使用 writeValue 和以下函数:
func sendData() {
while (self.sendDataIndex < self.dataToSend.length) {
var amountToSend = self.dataToSend.length - self.sendDataIndex!
if (amountToSend > NOTIFY_MTU) {
amountToSend = NOTIFY_MTU
}
// Copy out the data we want
var chunk = self.dataToSend.subdataWithRange(NSMakeRange(self.sendDataIndex!, amountToSend))
// Send it
self.discoveredPeripheral?.writeValue(chunk, forCharacteristic: self.setupCharacteristic, type: CBCharacteristicWriteType.WithoutResponse)
// It did send, so update our index
self.sendDataIndex = self.sendDataIndex!+amountToSend;
}
self.discoveredPeripheral?.writeValue("EOM".dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: true), forCharacteristic: self.setupCharacteristic, type: CBCharacteristicWriteType.WithResponse)
}
我的问题是它需要的时间比我需要的要长得多,大约 30 秒。
奇怪的是,即使我在发送图像时使用 CBCharacteristicWriteType.WithoutResponse ,我也会得到他们的响应,我想知道这是否会使其变慢。
这就是我在外围设备方面的特色设置:
var cbProperties = CBCharacteristicProperties.Read|CBCharacteristicProperties.Write|CBCharacteristicProperties.Notify
var cbPermissions = CBAttributePermissions.Readable|CBAttributePermissions.Writeable
var transferCharacteristic = CBMutableCharacteristic(type: CBUUID.UUIDWithString(SETUP_CHARACTERISTIC_UUID), properties: cbProperties, value: nil, permissions: cbPermissions)
我为 NOTIFY_MTU 尝试了不同的值,范围从 20 到 900,但它越高,writeValue 执行的次数越少,但每个包到达所需的时间越长。
我已经看到传输执行得更快,关于如何改进它的任何建议?
谢谢