1

retainシングルトンで使用する意味はありますか? シングルトン パターンを使用するポイントは、1 つのグローバル オブジェクトを保持してさまざまなクラスからアクセスできるようにすることだと思います。retainそのようなオブジェクトで使用するケースは何でしょうか?

通常、retainシングルトン クラスでの の実装はself(シングルトン インスタンスではなく) 次のように返されます。

-(id)retain
{
   return self;
}

私は最近、いくつかのオープン ソース コードを調べましたが、作者はシングルトンを繰り返し保持していました。

object = [[SingletonClass shareObject] retain]

でリリースしましたdealloc

そのため、このプロジェクトをビルドしようとすると、最初は機能しましたが、後でシングルトン オブジェクトの変数にアクセスしようとするとクラッシュしました。

シングルトンオブジェクトを保持してアクセスしようとすると、正確にはどうなりますか?

4

3 に答える 3

2

シングルトンだからといって、その寿命が必ずしもプロセスの寿命であるとは限りません。たとえば、リソースを取得するシングルトンがあるとします。しかし、そのリソースが必要になるまでは、それを作成しても意味がありません。同様に、すべてのインスタンスがそのリソースで完了していることを知っているかもしれません。シングルトンが存在し続ける必要があるかどうかを追跡する簡単な方法は、保持カウントです。

たとえば、ユーザーのデバイスに組み込まれているビデオ カメラを表すシングルトンがあるとします。カメラにアクセスする必要があるアプリケーションのさまざまな部分が存在する場合があります。ただし、カメラなしでアプリを使用することも可能かもしれません。また、ワークフローによって、ある時点で (プライバシーなどのために) カメラをオフにする必要がある場合もあります。したがって、ユーザーがカメラの使用を開始するアクションを開始するまで、シングルトンを割り当てません。写真を撮る、QR コードをスキャンする、ビデオを録画するなど、カメラを使っていくつかのアクションを実行する場合があります。その後、これらのアクションをすべて終了し、カメラで取得したメモリを解放する必要がある場合があります (特にモバイル デバイスの場合)。 )。それで彼らはそれらの行動を終わらせます。カメラ関連の各アクションがカメラ シングルトンを保持している場合、それぞれが完了したときにそれを解放します。

于 2013-09-18T04:52:59.060 に答える