2016-12-22 25 views
1

我運行下面的代碼:[peripheral maximumWriteValueLengthForType:CBCharacteristicWriteWithResponse]返回什麼?

[peripheral maximumWriteValueLengthForType:CBCharacteristicWriteWithResponse]; 

在我的情況(iPhone 7,iOS的10.0.2),則返回512這個數字是什麼意思?

從文檔:

方法maximumWriteValueLengthForType:

的最大數據量,以字節爲單位,可在單次寫入型被髮送到一個特徵。

但是,如果我嘗試發送500600 bytes它的工作原理完全相同。目標設備接收所有數據。在這兩種情況下,都不會調用回調回調。

回答

0

據我所知,理論上它應該返回ATT MTU的大小,因爲它是從中央向外設請求的。從外圍側看,類似的值爲central.maximumUpdateValueLength,建議避免發送特徵值大於central.maximumUpdateValueLength的通知。但不幸的是,這並沒有明確的文件記錄,蘋果自己的例子(BTETransfer應用程序)使用20的默認ATT MTU大小是安全的。對於通知,我認爲,如果您嘗試更改超過central.maximumUpdateValueLength字節,可能會發生不好的事情。但從我在Android上的實驗中,我發現從另一側 - 中央側 - 某種緩存正在進行,並且可能發送比當前ATT MTU大小更多的字節(在Android上,它是通過onMtuChanged可獲得,並且在連接後似乎也立即被協商到512)。所以,我們可能會認爲在iOS上同樣的緩存正在進行,但我不確定它有多大。在Android上,我們至少有寫回調來知道何時寫更多的數據是安全的。在iOS上,不確定如果我們嘗試寫入會發生什麼情況,讓我們假設從中心側寫入1MB的可寫特性。但我今天會嘗試。

此外,行爲可能IOS版本不同而有差異,因爲central.maximumUpdateValueLength是因爲iOS的7,但僅peripheral maximumWriteValueLengthForType以來的iOS 9

可用