1

我之前(大约一年前)写过 Objective-C,但那是在 ARC 之前。我有一个不需要从 NSObject (或任何其他 NS* 类)继承的类,但如果没有,我在尝试实例化单例时会收到此错误:

+(Operator *) getInstance
{
  static Operator * g_instance = NULL;

  if (NULL == g_instance)
  {
      @synchronized( self )
      {
         g_instance = [[Operator alloc] init];
      }
  }

  return( g_instance );
}

选择器“alloc”没有已知的类,它被列为 ARC 问题。
ARC 现在是否要求所有类都继承自 NSObject ?还是我错过了一个更大的想法?

4

3 回答 3

3

好吧,如果你调用alloc你的类,不提供实现,也不继承NSObject's,我不确定你期望它做什么?

于 2012-07-23T20:55:01.160 回答
0

我认为这与ARC无关。Alloc 是 NSObject 的一个方法,所以如果你不继承 NSObject 的形式,你希望如何使用 Alloc?

于 2012-07-23T20:56:25.207 回答
0

如果您使用的是 Objective C,则每个类都必须从提供消息处理和生命周期管理的基类继承。

最初有一个 Object 类,但从 NexTStep 3 开始,Apple 和 Gnu 编译器和运行时更改为使用 NSObject。还有另一个基类 NSProxy 主要用于分布式对象。NSObject 还提供了基本的 Cocoa 功能,如 KVO。请参阅 Apple 的“ The Root class ”和这个 SO question

在您的情况下,编译器无法找到 alloc 消息的定义,但在运行时它不知道如何将任何消息发送到 Operator 类(如果已创建)。

于 2012-07-26T09:52:27.040 回答