添加控制器引用/指针到c ++单例类

时间:2012-08-19 23:23:02

标签: c++ ios pointers reference member

我有一个名为playbackhelper的单例类,我想添加一个成员,它是一个viewcontroller的引用。但我不认为我可以使该成员成为参考,因为我希望能够更改我链接到哪个控制器,并且我不认为这可以通过引用。

这是我的控制者:

@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];

但我不知道如何设置我的单身人士才能实现这一目标。现在在{1}}示例中设置它的方式将是控制器对象的副本,这不是我想要的。

1 个答案:

答案 0 :(得分: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;

所有内存管理都由编译器神奇地安排。