我有一个名为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;
所有的内存管理都是由编译器神奇地安排的。