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



我有一个名为playbackhelper的单例类,我想向其中添加一个引用视图控制器的成员。但我不认为我可以将该成员作为参考,因为我希望能够更改我链接到的控制器,而我认为有参考是不可能的。

这是我的控制器:

@interface InstrumentGridViewController : UIViewController {
}
-(void) someMethod;
@end

这是我的singleton类,我想要一个成员,它是指向控制器的某种指针。

class PlaybackHelper{
private:
    // Singleton methods
    PlaybackHelper();
    PlaybackHelper(PlaybackHelper const&);
    void operator=(PlaybackHelper const&);
public:
    static PlaybackHelper &getInstance();
    // ((((some InstrumentGridViewController member here))))
    InstrumentGridViewController controllerMember;
}

所以我的问题是:我如何将它们相互链接/我如何创建一个指向控制器的成员,以及应该如何初始化它?

EDIT:基本上,我希望能够从singleton类调用控制器方法,如下所示:

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

但我不知道如何设置我的单身汉来实现这一点。现在在示例中controllerMember的设置方式将是控制器对象的副本,这不是我想要的。

除了关于单例使用的争论之外,如果您使用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;

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

最新更新