-1

私はそのようなシングルトンを使用していました:

///.h
@interface ASMyController:NSViewController
+(id)myViewController;
@end
////.m
static ASMyController* singleton = nil;
@implementation ASMyController
+(id)myViewController
{
    if(nil == singleton)
    {
        singleton = [[[self class] alloc] init];
    }
    return singleton;
}
-(id)init
{
    self = [super initWithNibName:@"test" bundle:xxxx];
    if(self)
    {
        ..............................
    }
    return self;
}
@end

シングルトンは非ドキュメント ベースのアプリケーションでうまく機能します。ただし、ドキュメント ベースのアプリケーションでは、アプリの各インスタンスは同じ静的変数を共有します。私の最初の設計では、すべてのアプリ インスタンスではなく、1 つのアプリ インスタンスでのみシングルトンを使用していました。

設計を再考する必要があるということですか?または、シングルトンを辞書にすることもできます。キーを使用して現在のインスタンスのシングルトンを取得できますか? または、私にとって他の良いアイデアはありますか?

私の拙い英語があなたに迷惑をかけないことを祈ります..

4

1 に答える 1

0

あなたのメソッドのまさにその名前は、かなり基本的な何かが誤解されていることを示唆しています-全員my...が共有するシングルトンは1つだけで、オブジェクトはシングルトンの独自のコピーを所有していません。

シングルトンは変数を回避する方法ではありません。インスタンス変数(しばしば と省略される) または プロパティ[ASMyController myViewController]の代わりに使用しようとしている可能性があります。self->myViewControllermyViewControllerself.myViewController

おそらく、次の行に沿って何かを見る必要があります。

@interface ASMyDocument : NSDocument
{
   ASMyContoller *myViewController;
}

ただし、元の設計では、クラス、インスタンス、シングルトン、has-a、is-a などの関係/意味を実際に確認する必要があることが示唆されています。

于 2012-05-25T09:09:17.617 に答える