アプリ全体で使用されているシングルトンクラスがあります。このシングルトンクラスにデータを送信する必要がある別のクラスに取り組んでいますが、メインスレッドをフリーズするデータをまとめて送信できます。
このシングルトンクラスの別のインスタンスを作成する必要がありますか、それとも別のクラスとしてデータインポートユーティリティを作成する必要がありますか?
アプリ全体で使用されているシングルトンクラスがあります。このシングルトンクラスにデータを送信する必要がある別のクラスに取り組んでいますが、メインスレッドをフリーズするデータをまとめて送信できます。
このシングルトンクラスの別のインスタンスを作成する必要がありますか、それとも別のクラスとしてデータインポートユーティリティを作成する必要がありますか?
シングルトンは、その名前が示すように、単一のインスタンスのみが浮かんでいることを意味します。メインスレッドをフリーズするデータをディスパッチする必要があります。クラスの別のインスタンスはそれを助けません。
必要なだけ別のインスタンスを作成しますが、それをシングルトンとは呼ばないでください。
実際には、このデータを別のスレッドで送信し、データの送信中にNSLockを使用して、アクセスエラーが発生しないようにする必要があります。
使用する:
[self performSelectorOnBackGround:@selector(sendDataToSingleton:) withObject:@"data to send"];
シングルトンクラスの別のインスタンスを作成しないでください。作成すると、シングルトンであるため、アプリケーションの残りの部分はそのインスタンスにアクセスできなくなります。
それが役に立てば幸い。
定義上、シングルトンのインスタンスは1つだけにする必要があります。適切に構築されたシングルトンの場合、1つを超えることはできません。
メインスレッドが応答しないという問題が発生した場合は、ロードする必要のあるデータを小さなチャックに分割してください。このように、データの異なるチャンクをロードする間に、メインスレッドは必要なイベントを処理でき、他のオブジェクトはシングルトンのデータにアクセスできます。
また、レイジーデータロードメカニズムを実装することもできます。このメカニズムでは、オブジェクトがシングルトンからの情報を必要とする場合、シングルトンは新しいクラスが新しい情報を提供するのを待っているかどうかをチェックしてからロードします。