0

ビューコントローラへの参照であるメンバーを追加したいplaybackhelperと呼ばれるシングルトンクラスがあります。ただし、リンク先のコントローラーを変更できるようにしたいので、メンバーを参照にすることはできないと思います。参照ではそれが不可能だと思います。

これは私のコントローラーです:

@interface InstrumentGridViewController : UIViewController {

}
-(void) someMethod;
@end

そして、これは私のシングルトンクラスであり、コントローラーへのある種のポインターであるメンバーが必要です。

class PlaybackHelper{

private:

    // Singleton methods
    PlaybackHelper();
    PlaybackHelper(PlaybackHelper const&);
    void operator=(PlaybackHelper const&);

public:

    static PlaybackHelper &getInstance();

    // ((((some InstrumentGridViewController member here))))
    InstrumentGridViewController controllerMember;
}

だから私の質問は:どうすればそれらを相互にリンクできますか/コントローラーを指すメンバーを作成するにはどうすればよいですか?また、どのように初期化する必要がありますか?

編集:基本的に、次のように、シングルトンクラスからコントローラーメソッドを呼び出せるようにしたいです。

[PlaybackHelper::getInstance().controllerMember someMethod];

しかし、これを可能にするためにシングルトンを設定する方法がわかりません。現在の例で設定されている方法controllerMemberは、コントローラーオブジェクトのコピーであり、これは私が望んでいるものではありません。

4

1 に答える 1

0

シングルトンの使用に関する議論はさておき、ARCを使用している場合は、C ++クラス内でObjCオブジェクトを簡単に使用でき、メモリ管理が処理されます。

あなたがそれをアクセサーにしたいなら...

class PlaybackHelper{
private:
    // ... other stuff...
    InstrumentGridViewController *_instrumentGridViewController;

public:
    InstrumentGridViewController *controllerMember() {
        return _instrumentGridViewController;
    }
};


[PlaybackHelper::getInstance().controllerMember() someMethod];

パブリックメンバーにしたいだけなら...

class PlaybackHelper{
public:
    InstrumentGridViewController *controllerMember;
};


[PlaybackHelper::getInstance().controllerMember someMethod];

ObjCオブジェクトは重要なctor/dtorを持っていると認識され、コンパイラーが自動的にARCのものを処理します。

LLVM + ARC + C ++を使用すると、ObjCオブジェクトをC++と簡単に組み合わせることができます。実際、少し心配することなくこれを行うことができます...

std::vector<UIView*> listOfViews;

すべてのメモリ管理は、コンパイラによって魔法のように調整されます。

于 2012-08-20T00:54:37.217 に答える