【问题标题】:Error on init of custom class in objective c目标c中自定义类的初始化错误
【发布时间】:2021-12-10 21:32:19
【问题描述】:

我使用以下代码在目标 c 中分配和初始化一个类。该课程是可可触摸课程。我尝试使用下面的代码初始化类。

   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];

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

【问题讨论】:

    标签: ios objective-c


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 你写的是我偶然写了 MyClass 而不是 myClass。现在我通过阅读您的答案注意到了这一点。谢谢!
    • write=*right 我的错
    • 您仍然应该使用 [[MyClass alloc] init] 它的惯用语 - 阅读您的代码的其他人会期望它是这样做的。
    猜你喜欢
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多