Closed 0x0c closed 9 years ago
↑ thanks
handlerが3カ所(Konashi, KNSPeripheral, KNSPeripheralImpl)にcopyされるのはいまいちだなー
3カ所の同期タイミングがばらばらだから、例えば一度Konashi.find
した後 KNSPeripheral.connectedHandler = ...
ってセットした後に再度Konashi.find
して接続できたらconnectedHandler
はnilに上書きされてしまう。
disconnectだけKonashi
にあってそれ以外には無いのも気になる。
今の状況になっているのは、connectする前にhandlerをセットしたいから、というのはわかります。
この場合には移譲のパターンがよさそう。 10個もあるhandler達をcopyしたりgetter/setterを定義するのもあれなので、全handlerを引き受けるdelegateをつくってそこにhandlerをコピーしつつ、参照したいところから参照するのがコード量とcopyの混乱は減らせそう。
そうですね。 そこは自分も実装していて沿う感じました。 koshianが登場する前のコードを移植しているので、こうなってしまっています。 Notificationを飛ばしているので、それをキャッチしてhandlerを呼び出すのも良いかなと今思いつきました。 いかがでしょうか?
いや、複数のkonashiをつなぐ機能を実装した場合はそれでは汚くなるので、delegateを作って実装します。
複数のkonashiをつなぐ場合を考えるとKNSPeripheral
にdelegateを持たせるのがいいんですかね。
connectとdisconnectだけはKonashi
に持たせた方がいいのか、、
handlerを保持するクラスを作って、その参照をKonashiクラス、KNSPeripheralクラス、Implクラスで引き回すのはどうでしょうか。 delegateを実装するより、コード量や複雑さは減ると思います。
CBCentralManagerやCBPeripheralそれぞれに特定のイベント時に呼ばれるメソッドが分散しているのが、ややこしくなっている原因ですね...
いいと思います。
Konashi+LegacyAPI.m のそれぞれのdeprecatedなメソッドについて、推奨する代替手段をコメントに書いておいていただけますか。
例えばKonashi
のi2cRead:data:
は使わずに何をつかうようにするんでしたっけ...
blocksを使って値の取得をできるようにしました。 イベントドリブンで値を取得できます。 今まで用意されていたAPIをレガシーAPIとして別ファイルに移動させました。