OK、この質問は無関係または基本的すぎるように見えるかもしれませんが、私は常に自分が何をしているのか、なぜそれをしているのかを知りたいので、それが私のデザインに合っている場合は、光を当ててください。
だから、これが私が必要なものです:
- クラスがあるとしましょう
- ほぼどこからでもそのメソッドを使用したい
- オブジェクトを渡す代わりに、クラスメソッドと疑似グローバルインスタンスを使用することにしました。
それで、「MyDocumentManager」という名前のクラスがあるとしましょう。
これは私が通常行うことです:
+ (MyDocumentManager*)documentManager
{
MyDocumentManager* newDocumentManager = [[MyDocumentManager alloc] init];
if (newDocumentManager)
{
// initialize that new document manager
}
return newDocumentManager;
}
そしてそれを次のように使用します:
[[MyDocumentManager documentManager] someMethod];
しかし、私は通常、次のような提案をしている人を目にします。
+ (MyDocumentManager*)sharedManager
{
static dispatch_once_t pred;
static MyDocumentManager *sharedManager;
dispatch_once(&pred, ^{
sharedManager = [[MyDocumentManager alloc] init];
});
return sharedManager;
}
だから、ここに私の質問があります:
- 同じことですか?
- そうでない場合、違いは何ですか?
- そのアプローチの長所/短所は何ですか?(メモリ/速度などの観点から)
- どちらを使用する必要があり、その理由は何ですか?
- それらは両方とも私がそれらを必要とするものに適合しますか?