objective-c - objc/cocoa 的类变量范围问题?

标签 objective-c cocoa macos

在 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/

相关文章:

cocoa - 用于触摸屏应用程序的屏幕键盘

swift - CGEvent.tapCreate 返回 nil 即使禁用了沙箱

macos - 同步两个 NSScrollView

objective-c - 如何删除NIB缓存?

objective-c - 运行同一个 XPC 服务的多个实例 (NSXPCConnection)

objective-c - 设置背景图片 NSToolbar

objective-c - 对关键事件使用react

objective-c - 如何仅更改 NSTextView 中整个样式文本的字体大小

objective-c - 如何将字符串作为 UIButton 的标签传递

iphone - 用户界面自动化 : Failed to authorize rights with status: -60007