2011-03-24 11 views
0

基本的には、UIViewのすべてのサブビューであるクラスの負荷があります。動的インクルードクラスまたはクラスを含まないオブジェクトのインスタンス化

このアプリは(種類の)スライドショーアプリケーションです。私はスライドがplistで取ることができる潜在的な "ルート"のリストを作ることができるようにしたい。

私は100sのクラスを持っている可能性があり、私はそれらのうちの1つを一度使用する可能性があるすべてのクラスを含める必要はありません。

これには方法がありますか?何らかの形でクラスをインスタンス化せずにクラスをインスタンス化できますか?

または、私は使用する可能性のあるすべてのクラスを含める必要がありますか?

include all ...のような「グローバルなインクルード」はありますか? :P

おかげ トム

+2

* 100sクラス*は、あなたが良いクラスデザインを持っているかどうかを疑います。 – vikingosegundo

+0

Seconded。あなたは、 "スライドが取ることができる潜在的なルートのリスト"を持っていると言いました - それぞれのルートが別々のObjective-Cクラスであると言っていますか?もしそうなら、それはひどく壊れたデザインのIMHOです。 –

+0

100sは誇張です! :pでもプリンシパルは同じです。問題は、それぞれの "スライド"がカスタム機能を持つことです。だから、バーを上向きに成長させて値を表示する棒グラフがあり、別のビデオが再生され、別のものが特定の製品の売り上げを計算する種類の「スプレッドシート」を持つことがあります。どのように他にこれをやりますか?このすべてを1つのクラスに絞ろうとすると、恐ろしいことになります! (そして将来的には変更が難しい)。 –

答えて

3

何百ものクラスがありますか?おおよそ1つのカスタムクラスがあるように思えます。これはスライドを表します。

質問に対するご意見は役に立ちます。スライドをコンテンツから分離することを検討してください。 1つまたは複数のコンテンツオブジェクトを管理する機能を含む、すべてのスライドに共通の機能を提供する単一のスライドクラスを持つことができます。その後、スプレッドシート、アニメーション可能なグラフ、チェックリストなど、さまざまなコンテンツクラスを作成します。スライドはそのデータを調べて、どのコンテンツクラスをインスタンス化するかを決定します。

すべてのコンテンツクラスに共通の基本クラスがある場合、スライドクラスは基本クラスについてのみ知る必要があります。コンテンツ基本クラスは、すべてのコンテンツクラスのマネージャとして機能することができます。与えられたデータに対して適切なコンテンツオブジェクトを返す、-contentForData:(NSData*)dataのようなファクトリメソッドを与えることができます。スライドクラスは、コンテンツ基底クラス以外のものを知る必要はありません。このようにすると、スライドクラスにすべてのヘッダーを含めることなくコンテンツクラスをインスタンス化するという目標を達成できます。コンテンツベースクラスは、もちろん、すべてのコンテンツクラスについてまだ知っていなければなりません。

基本クラスがそのサブクラスについて知る必要がありますが、そのサブクラスは基本クラスから派生しています。コンテンツサブクラスで前方@class宣言を使用することでこの問題を回避できると思います。

+0

2つのクラス - スライドを表す1つとそのルートを表す1つのクラス。間違いなく数百も! :-) –

+0

右。私は各ルートが単なるスライドの配列であると思っていましたが、利用可能な仕様、つまり大雑把に言えば、言うのは難しいです。 ;-) – Caleb

+0

はい、私はこのスライドを持っていますが、今は各スライドにカスタム構造を入れる必要があります。これについてどうやって行きますか?別々のUIViewスライドを作成することをお勧めしますか?さもなければ、私はできるだけ多くのコードを書いていますが、すべての可能なスライドのためにあらゆる可能性のある出来事を持ったクラスを作成しなければなりません。しかし、すべてのhuuuuge god-slideクラスにあります。 。 :p –

0

私は何とかそれを含めずにクラスをインスタンス化することはできますか?

私は、コンパイラは間違いなくclass型の変数を使用する前に、現在のスコープでclass定義を参照する必要があるため、これは可能ではないと思います。

1

クラスを使用している場合、どのクラスのメッセージが応答するのかを知る必要があります。その情報を共通のスーパークラスまたはプロトコルのいずれかに組み込み、それを使用するだけです。

0

質問が正しく分かれば、#includeディレクティブを1つ置いて、プロジェクトのすべてのクラスにアクセスできるようにします。 ProjectName_Prefix.pchファイルでこれを行うことができます。すべての#include文または#import文は、すべてのソースコードファイルに含まれます。

+0

種類、笑。その良い答え、私はこれを前に気づかなかった、ありがとう。 :)しかし、それは私が探しているものではありません。私はダイナミックに、私のリストにそのスライドセットを表すクラスを含めることができるようにしたいと思います。 :) –