0

我有一个名为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];

但我不知道如何设置我的单例以使这成为可能。现在在示例中设置的方式将是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 回答