gpt4 book ai didi

c++ - 带有 C++ 对象作为属性的 Objective C ViewController 具有 getter 和 setter,每次引用它时都会重新初始化它

转载 作者:太空宇宙 更新时间:2023-11-04 12:22:54 25 4
gpt4 key购买 nike

我已经尝试了很多代码组合,但没有示例可以展示。

我有一个 Objective C View Controller ,在界面中我声明了一个 C++ 类,其中包含用户想要的首选项。我在 header 中执行 @property 命令,在 .mm 文件顶部执行 @synthesize 命令。

然后我在 loadView 方法中使用该类并对其进行初始化,这是一件好事,我将所有首选项完全按照我希望的方式加载到该类中,这一切都很好。

然后往下在numberOfSectionsInTableView 和numberOfRowsInSection 等其他方法中,我去使用类来检索值,这就出错了。

每次我去使用它时,这个类都会初始化。所以当想知道首选项文件中有多少组时,我调用 countGroup 的 C++ 方法,它只是重新初始化所有内容,我的 C++ 类中不再有任何数据。

我认为,@property 命令以一种专门重新初始化类的方式生成了 getter 和 setter。这只是一个猜测,但如果我是对的,我该如何重写它们,或者是否有其他方法可以通过我的 View Controller 全局使用我的 C++ 类。

注意:如果 C++ 类被引用为指针,它就无法工作,因为它有大量嵌套 vector 和其他东西,编译器只会抛出一个不稳定的问题。

最佳答案

我和你有过类似的故事,我尝试使用 boost 共享指针,但奇怪和疯狂的事情不断发生。

Objective-C++ 只是不按照与 C++ 相同的规则工作。 Obj-C++ 不涵盖 C++ 类的内存范围规则。智能指针和 vector 之类的东西在 Obj-C++ 中无法正常工作。

我绕过它的方法是编写一个非常简单的容器类:

class MyContainerClass
{
public:
boost::shared_ptr<MyClass> mySharedPointer;
/// etc
};

然后在我的 Obj-C++ 代码中,我将分配/释放上面的 Obj-C++ 方式:

- (id)init
{
if (self = [super init])
{
myContainer = new MyContainerClass();
// etc
}
return self;
}

- (void)dealloc
{
// etc
delete myContainer;
[super dealloc];
}

然后我会有一个像这样的访问器:

- (boost::shared_ptr<MyClass>)mySharedPointer
{
return myContainer->mySharedPointer;
}

这是一种丑陋的方法,但这是我能弄清楚如何解决这个问题的唯一方法。

关于c++ - 带有 C++ 对象作为属性的 Objective C ViewController 具有 getter 和 setter,每次引用它时都会重新初始化它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4010813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com