You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Objective-C自定义Cocoa Touch类调用init方法崩溃原因求解

崩溃原因解析
  • 核心错误是调用init方法的主体错误,混淆了Objective-C类方法与实例方法的调用规则。

代码执行逻辑拆解

原错误代码的问题:

你拆分的两行初始化代码中:

  1. myClass = [MyClass alloc]; 是合法调用:
    +alloc是MyClass的类方法,可直接通过类名调用,执行后会返回一块已经分配好内存、未初始化的MyClass实例,正常赋值给myClass变量。
  2. myClass = [MyClass init]; 是非法调用:
    -init是实例方法,仅能由MyClass的实例对象调用,你这行代码直接给MyClass这个类对象发送了init消息,类对象未实现实例级别的init方法,因此触发NSInvalidArgumentException异常,报错提示中的cannot init a class object也明确说明了这一点。

正确写法的逻辑:

myClass = [[MyClass alloc] init]; 执行时会先调用[MyClass alloc]得到未初始化的实例,再直接给这个实例发送init消息完成初始化,完全符合方法调用规则,因此可以正常运行。
如果你想保留拆分写法,只需要把第二行修改为myClass = [myClass init];,运行效果和合并写法完全一致。


内容的提问来源于stack exchange,提问作者stefanosn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 13:54:04