Objective-C ARC是否需要继承NSObject?

时间:2012-07-23 20:49:26

标签: objective-c automatic-ref-counting

我之前(大约一年前)写过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吗?或者我错过了一个更大的想法?

3 个答案:

答案 0 :(得分:3)

好吧,如果你在课堂上调用alloc,没有提供实现,而不是继承NSObject,我不确定你的期望是什么?

答案 1 :(得分:0)

我认为这与ARC没有任何关系。 Alloc是NSObject的一个方法,所以如果你没有继承NSObject形式你怎么期望使用Alloc?

答案 2 :(得分:0)

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

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

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