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