目标c中自定义类初始化错误



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

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]在类MyClass上调用alloc方法。它返回MyClass实例,准备初始化,您可以通过在返回的实例上调用init来完成。

通常你在Objective-C中写[[MyClass alloc] init],因为在分配和初始化之间没有什么你可以或应该做的。

在你的代码中,[MyClass init]把init当作一个类方法,而它不是。

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

可能会工作(注意,我在myClass上调用init,而不是MyClass,但它会让任何未来的读者感到不安,让他们想知道为什么你不按正常的方式做。

最新更新