2013-08-23 10 views
5

私が働いている会社は、シングルトンである巨大なクラス(Globals.m)を持っています。それはNSUserDefaultsに入るはずの大部分のBOOLを保存しますが、様々なViewControllerに属するビデオプレイヤーのようなものへのポインタもあります。私はiOS開発にかなり新しい(と私は低インターン)が、私はコードが高い天国のにおいが私の腸の中で知っている。シングルトンを使用してすべての変数を格納することが悪い理由を説明するにはどうすればよいですか?グローバル変数クラス(シングルトン)を悪用するのはなぜですか?

編集:私はシングルトンが悪いことを意味するわけではありません。本質的に、アプリの重要な変数はすべてこの1つのインスタンスに格納されます。

+1

パターンはちょうどパターンです...本当に悪いのは、盲目的に何かが悪いと言っていることだけです...シングルトンは悪くはありませんが、もちろん悪いシングルトンを使用することもできます...それはあなたのデザイン/使用方法によって異なります... – Macmade

+0

シングルトンパターンです...適切に使用しないでください。実際にシングルトンではないとシングルトンを使用していると誰かが思うように感じます。 –

+0

ありがとう@JoshCaswell、しかし、私は彼のすべての点にはっきりと従っていませんでした。繰り返して申し訳ありません! – Febble

答えて

3

UIKitの多くのオブジェクトはシングルトンです。 UIApplicationオブジェクトはシングルトンです。 NSUserDefaultsのシングルトンはstandardUserDefaultsです。 UIDevice currentDeviceはシングルトンを返します。

シングルトンだからといって、悪いというわけではありません。悪い点は、他のクラスの機能をシングルトンオブジェクトに結び付けようとするときに、シングルトンや影響を受けるオブジェクトを簡単に変更できないほど深く掘り下げていることです。

シングルトンを使用して、非CoreDataオブジェクト構造を格納します。また、ライブラリディレクトリの取得、データのエンコーディング、キー付きアーカイブのためのヘルパーメソッドをいくつか定義します。だから、私はそれが必要なところでマスター配列オブジェクトを参照することができますし、そうでなければコピーとペーストだけの方法に簡単にアクセスすることができます。

+0

だから、すべてが変数のためにそれを使用しているなら、害はありませんか? – Febble

+0

View Controllerクラス内のシングルトンのオブジェクトに直接アクセスして変更する場合、View Controllerクラスのプロパティとしてそれらのオブジェクトを割り当てるのではなく、それが悪いときにそれを割り当てることになります。すなわち、 '-viewDidLoad {[[[シングルトン共有]配列] addObject:newObject]; } 'は、View Controllerの配列のプロパティを設定してそこで変更するのではなく、悪くなります。 – Justin

0

Globals.m実際にシングルトンのように聞こえるわけではありませんが、それが設定の目的に使用されているように見えますか?その後、#definesまたはexternでいっぱいのファイルは同じようになります。それ以上の詳細がなければ、あなたが探しているものを知るのは難しいです。

+0

シングルトンとして設定され、シングルトンとして参照するコメントが明示的に設定されています。また、設定だけでなく、他のクラスにアクセスする必要のある変数を格納するために積極的に使用されています。 UIとは別に、実際には相互に参照しないでください。すべてがNSNotificationCenterとこのGlobalsインスタンスを介して行われます。 私はそれが悪い習慣であるという結論に飛び乗ったことは、私が言ったように、私はあまり経験していない可能性が非常に高いです。 – Febble

関連する問題