0

在上一篇文章中,我解释说我正在将一个旧的“C”程序转换为 Objective-C,并了解了消息传递(旧版本)静态方法和类方法之间的区别。

但是,我现在如何获得一个类方法来调用实例方法(假设它甚至可能)?这是原始(静态)函数:

static int newSplitB(int b, int hi, int lo, int found)
{
 int hlp;

 if(hi - lo <= 1)
   return 0;

  bIs(lo + (hi - lo + 1) / 2); // calls function bIs();
  return 1;
}

并将完全相同的代码“翻译”成 Obj-C:

+(int)newSplitB :(int)b :(int)hi :(int)lo :(int)found
{
int hlp;

if((hi - lo) <= 1)
    return 0;

[TablesClass bIs:(lo+(hi-lo+1)/2)]; // gives compile error
return 1;
}

“bIs()”函数——为简洁起见——位于我的“表”类中的一个单独的源文件中。不幸的是,尝试构建程序会给我一个“TablesClass”未声明(在此函数中首次使用)错误,即使该类之前已在同一实现文件中分配/初始化。

我已经在网上搜索了几个小时以寻求解决方案,但无济于事。如果我想做的事情是不可能的,我该如何修改最后一个方法来做我想做的事情?提前致谢 :-)

4

3 回答 3

1

确保您正在导入TablesClass.h文件,否则当前类将不知道它的存在,并且是处理此错误时的常见问题。

于 2011-02-19T06:21:41.010 回答
1

您之前在同一个实现文件中说过您“分配/初始化”了 TableClass,但看起来您像使用静态方法一样使用它。当你想使用它的静态方法时,你不必分配/初始化一个类的实例。此外,如果您在 TableClass 的实例中分配/初始化,那么这意味着您将其存储在静态方法 newSplitB 可以访问的某个位置。

于 2011-02-19T06:28:27.713 回答
1

有可能,也有可能,这取决于您如何看待它:

要调用实例方法,您需要一个对象的实例。如果您有对象,则可以从类方法发送此消息。

没有类的实例,就不能在任何地方调用实例方法。

您可以从任何地方调用类方法(假设它在翻译中可见)。

如果bIS只是 ac 函数,则不需要它是实例方法。实际上,您可以将其保留为 ac 函数。

(也许一个扩展的例子可以帮助我们理解为什么这必须是一个实例方法)

于 2011-02-19T06:30:14.707 回答