gpt4 book ai didi

objective-c - 从 C 函数访问类 ivar

转载 作者:太空宇宙 更新时间:2023-11-04 08:49:40 26 4
gpt4 key购买 nike

我在一个类中有一个 C 函数(是的,必须在 C 中),我需要从那个类中访问一个 ivar。有问题的 ivar 是一个 NSMutableDictionary。

据我了解,C 函数无法直接访问类的 ivar,必须将引用传递给它们。所以,我在实现之前添加了这个

static NSMutableDictionary *myIvarRef;

并在该类的初始化时执行此操作。

- (id)init
{
self = [super init];
if (self != nil)
{
myIvar = [[NSMutableDictionary alloc] init];
myIvarRef = myIvar;
}
return self;
}

稍后,在该函数内,当我尝试使用 myIvarRef 时,它为 nil。

我错过了什么?

谢谢


C 函数放在这里很复杂,但我尝试使用的行是这样的

MyObject obj = myIvarRef[myKey];

我在这一行放置了一个断点,当它停止时,我在控制台上输入 po myIvarRef,它给了我 nil。

最佳答案

您的代码存在一个大问题,即静态 myIvarRef 变量被覆盖每个 init 调用,因此总是指向 最后创建的 对象的 ivar。

更好的解决方案是将对象指针作为附加参数传递给C函数。像这样:

void myFunction(void *uData, /* other parameters */ )
{
MyClass *obj = (__bridge MyClass *)(uData);
// Now you can access all properties, ivars etc of obj.
// ...
}

- (void)myMethod
{
// Call C function from Objective-C method:
myFunction((__bridge void *)(self), /* other arguments */ );
}

关于objective-c - 从 C 函数访问类 ivar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20121772/

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