objective c 中的自定义 class 初始化错误

Error on init of custom class in objective c

我使用以下代码在 objective c 中分配和初始化 class。 class 是 cocoa 触摸 class。我尝试用下面的代码初始化 class。

   MyClass *myClass;
   myClass=[MyClass alloc];
   myClass=[MyClass init];

它崩溃于

myClass=[MyClass init];

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[MyClass<0x100b075d0> init]: cannot init a class object.'

如果我使用

myClass=[[MyClass alloc] init];

有效。知道为什么会这样吗?

[MyClass alloc] 调用 class MyClass 上的 alloc 方法。它 returns MyClass 实例 ,准备好初始化,您可以通过调用 init 返回的实例来完成初始化。

通常你在 Objective-C 中写 [[MyClass alloc] init] 因为在分配和初始化之间你不能或应该做任何事情。

在您的代码中,[MyClass init] 将 init 视为 class 方法,但事实并非如此。

MyClass *myClass;
myClass = [MyClass alloc];
myClass = [myClass init];

可能会起作用(请注意,我是在 myClass 上调用 init,而不是 MyClass,但这会让任何未来的读者感到不安,并让他们想知道为什么你不只是以正常方式进行。