周辺機器、サービス、および特性オブジェクトをメモリにキャッシュしようとしましたが、手動キャッシュが機能しません。周辺機器から切断すると、サービスおよび特性オブジェクトは使用できなくなります。実際、CBPeripheral でさえも変更することができます。CoreBluetooth には、デバイスの UDID が数分ごとに変更される内部動作があります (CBPeripheral が別の iOS デバイスの場合)。
ただし、iOS 6 向けの開発を実行している場合は、作業を高速化する方法があります。WWDC 2012 での高度な Bluetooth の講演を見ると、キャッシング サービスと特性に関するスライドが最後に表示されます。基本的に、OS はそれらすべてをキャッシュできますが、ペアリングされたデバイスに対してのみです。ペアリングするには、不十分な認証エラーで書き込み要求に応答する必要があります。たとえば、iOS 周辺機器の場合、次のように記述します。
- (void)peripheralManager:(CBPeripheralManager *)peripheralManager didReceiveWriteRequests:(NSArray *)requests {
...
[peripheralManager respondToRequest:request withResult:CBATTErrorInsufficientAuthentication];
...
}
iOS 周辺機器にペアリング ダイアログが表示され、その後ペアリングされます。それ以外は、コードを変更する必要はありません。通常どおり、discoverServices などを呼び出すだけで、より迅速に (つまり、即座に) 応答します。
10.8.3 でもこの動作をテストしましたが、動作していないようです。そのため、OS X で高速化する方法を知りません (周辺機器に接続したままにする以外に)。