2013-11-21 27 views
0

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

据我所知,C函数没有直接访问类的ivars并且引用必须传递给它们。所以,我已经实施

static NSMutableDictionary *myIvarRef; 

前加入这个,做这种对类的初始化。

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

后来,在那个函数里面,当我尝试使用myIvarRef时它是零。

我错过了什么?

感谢


C函数是复杂的放在这里,但我想使用的线路是这样的

MyObject obj = myIvarRef[myKey]; 

我把一个断点在这条线上,当它停止我在控制台上输入po myIvarRef,它给我零。

+0

您是否在使用ARC? –

+0

是的,为什么??????? – SpaceDog

+0

只是想确保你没有遗漏保留。 –

回答

2

你的代码有静态myIvarRef变量在 覆盖每个init调用,因此总是指向的伊娃最后创建对象的大问题。

一个更好的解决方案是将对象指针作为附加参数传递给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 */); 
} 
+0

T H A N K S! ! ! – SpaceDog