我使用以下代码在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
,但它会让任何未来的读者感到不安,让他们想知道为什么你不按正常的方式做。