在 Leopard 10.5.8 下使用 GCC 4 在 XCode 3.1.3 中进行编译,以 10.5 作为我的目标...
我有一个界面,因此:
@interface testThing : NSObject { classContaininghooHa *ttv; }
@end
以及一个实现,因此:
@implementation: testThing
- (void) instanceMethodMine
{
[ttv hooHa]; // works perfectly, compiles, links, hooHa is invoked.
}
// void cFunctionMine()
// {
// [ttv hooHa]; // compiler: 'ttv' undeclared (first use in this function) "
// }
void stupidCFunctionMine((testThing *)whom) // whom is passed class 'self' when invoked
{
[whom instanceMethodMine]; // compiles, links, works. :/
}
@end
现在,我的理解——明显有缺陷——是,如果你声明了一个变量、类ID或其他,它对于类来说是私有(private)的,但在类内,本质上是作为全局执行的,存储在分配的类中实例在其存在期间。
这就是 objc 方法的作用方式。
但是在上面的 c 函数中,也是在类中编写的,变量似乎是不可见的。这对我来说没有意义,但它就是这样。
有人可以向我解释一下发生了什么事吗?
当您这样做时,我如何将其声明为实例变量,以便我可以在如上所示的类范围内以及方法内声明的 c 函数中使用该方法?
非常感谢您的见解。
最佳答案
在哪里声明/定义“普通”c 函数没有任何区别。它们不是类的一部分,它们只是普通的旧 C 函数。与类(class)没有任何联系。如果您确实不想使该函数成为真正的 Objective-C 方法,则传递它们所处理的实例是一种解决方法。
关于objective-c - objc/cocoa 的类变量范围问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5724347/