0

まず、情熱を持ってシングルトンを軽蔑します。たぶん使ってみるべきなのに、使いたくない。データクラス(ロード時にView Controllerによって1回だけインスタンス化される)を作成し、別のクラスを使用して、大量のデータが溢れるまでそのデータインスタンスのがらくたにメッセージを送信したいと思います。

だから、どうすればそれを行うことができますか?インスタンス化したときに、データクラスのインスタンスへのポインタを作成しました。別のViewControllerに移動しました。アクションが発生し、初期データオブジェクトを更新したいと思います。ポインタを使ってそのオブジェクトを参照する必要があると思いますが、その方法がわかりません。はい、プロパティとゲッターとセッターを設定しました。これらは機能しているように見えますが、最初のビューコントローラークラスでのみ機能します。

4

6 に答える 6

1

パターンが気に入らない場合や適合しない場合は、シングルトンを使用する必要はありません。最初のView Controllerで2番目のView Controllerを作成していると仮定すると、2番目のView Controllerでモデルオブジェクトのivarとプロパティを宣言し、インスタンス化するときにモデルオブジェクトをこのプロパティに割り当てます。

于 2010-06-17T23:13:38.533 に答える
0

アプリデリゲートのプロパティにしないのはなぜですか? そうすれば、シングルトン パターンを使用する必要はありませんが、Apple の既存のシングルトン パターンの使用法を利用できます。

于 2010-06-18T07:53:03.990 に答える
0

うーん。こんにちは。Core Data はあなたにとって十分なフレームワークではありませんか? これにより、単一の永続ストアと複数のコンテキストを使用して、通知に応じて更新と変更のマージを管理できます。私はここで的外れかもしれませんが、最初の質問でよく受け入れられているパターンについて強い意見を持って質問を始める方法を見ると、iOS で目的の c ランタイムと Foundation クラスを使用する方法を発見するのに多くの時間を費やしていないことがわかります。協力して課題を達成することができます。どのソフトウェアでも、1 つのオブジェクトだけが特定のリソースを所有します。シングルトンを採用する必要があります。時間をかけてhttp://www.cocoadesignpatterns.com/を読むことをお勧めします 。そうそう、KVOの意味を調べてください。

于 2010-06-18T03:55:00.337 に答える
0

オブジェクトのグローバル変数を作成し、作成時にそこに保存します。init メソッド (おそらく悪いスタイル) で、または呼び出し元から、またはインターフェイス ビルダーを介して接続できます。変数を使用するファイルで変数を認識させるだけです。

または、ある種のシングルトン パターンを使用して、そのクラスから直接インスタンスを取得します。よりきれいに見えます。

于 2010-06-17T22:50:56.527 に答える
0

Objective-C は C のスーパーセットであることを忘れないでください。

基本的に、データ クラスはプレーンな Cstructです。

そのクラスの変数に別のクラスからアクセスする場合は、グローバルにします。

mydata.h:

struct MyData {
    // Whatever data fields that you need, e.g.:
    NSInteger value;
};

extern struct MyData mydata;

mydata.c:

struct MyData mydata = {
    // Whatever initial value that you find relevant, e.g.:
    .value = 42;
};
于 2010-06-18T08:03:51.920 に答える
0

シングルトンを真剣に使用してください。コードがわからないために気に入らない場合は、次のようにします。

@interface Order : NSObject {
NSMutableArray *order;
}

@property (nonatomic, retain) NSMutableArray *order;

+ (Order *)sharedInstance;

@end

#import "Order.h"


@implementation Order

@synthesize order;

+(Order *)sharedInstance {
static Order *myInstance = nil;

@synchronized(self) {
    if(!myInstance) {
        myInstance = [[Order alloc] init];
        }
    }
return myInstance;
}

-(void)dealloc {
    [order release];
    [super dealloc];

}
@end
于 2010-06-17T22:55:14.163 に答える