1

Apple が HMHomeManager の複数のインスタンスを作成することを許可している理由と、その目的は何ですか?

HMHomeManager のインスタンスはシングルトンであることが期待されます。

4

3 に答える 3

4

私は Apple を代弁することはできませんがHMHomeManager、シングルトンであることでメリットが得られるケースは見当たりませんし、いくつかの明らかなデメリットもあります。

  1. HMHomeManagerプロパティを持っていdelegateます。デリゲート パターンは、デリゲートが単一のデリゲートにメッセージを送信する場合、または多くのデリゲータがデリゲートを共有する場合に適しています。HMHomeManagerただし、シングルトンの場合のように、1 つの委任者が多くの委任者に関心のあるメッセージを生成する可能性がある場合は役に立ちません。
  2. シングルトンは簡単に解放されません。をシングルトンとして使用するアプリHMHomeManagerは、そのオブジェクトが不要になった場合でも、ホーム データベースへの変更を監視するメモリ内にそのオブジェクトを保持します。
  3. 存在するのは 1 つだけであるという仮定は、HMHomeManager永遠に成り立たない可能性があります。1 つHMHomeManagerに多くのホームを含めることができますが、それらはすべて共通のユーザーを共有します。このクラスをシングルトンとして設計すると、アプリが一度に複数のユーザーに代わって動作することができなくなります。そのような動作がまったく必要ない場合でも、開発者は、設計プロセスの早い段階でサポートできないインターフェイスを選択しないようにするのが賢明かもしれません。
于 2016-01-31T18:09:17.843 に答える
1

HMHomeManager の複数のインスタンスを作成しないでください。以下のコードが役立つ場合があります。既存の家に変更を加えたい場合は、部屋、ゾーンの追加などの変更を行った後にコードを実行してみてください...

for(HMHome *home in appDelegate.homeManager.homes)
{
    if([home.name isEqualToString:appDel.selectedHome.name])
    {
        appDel.selectedHome = home;
    }
}
于 2016-03-07T12:38:18.873 に答える